我正在编写一个项目——学生信息的 MIS。
我使用chaintable来组织数据。我写了一个函数Sort()
来使数据按stuID
(学生ID)排序。但是,点CNode *p
还没有分配,它0x00000000
仍然是。
现在,看看我下面的部分代码。
class CNode
{
friend class CChainTable;
public:
CStudent GetData()
{ return data; }
CNode* GetNext()
{ return next; }
private:
CStudent data;
CNode *next;
};
class CChainTable
{
private:
CNode *pHead;
CNode *pCur;
public:
CChainTable(): pHead(NULL),pCur(NULL)
{}
~CChainTable()
{
CNode *p=pHead;
while(pHead)
{
pHead=p->next;
delete p;
p=pHead;
}
}
void SetCurToHead()
{ pCur=pHead; }
void Sort()
{
SetCurToHead();
if(pHead == NULL){
cout<<"No data in the system."<<endl;
}else{
char stuID_min[10];
CNode *pCurFront,*pFront;
pCurFront=pHead;
CNode *p=pHead;
for(pCur=pHead;pCur!=NULL;pCurFront=pCur,pCur=pCur->next)
{
strcpy( stuID_min,pCur->data.GetStuID() );
for(pFront=pCur,p=pFront;pCur!=NULL;pFront=p,p=p->next)
{
if( strcmp(stuID_min,p->data.GetStuID() )>0 ) {
strcpy( stuID_min,p->data.GetStuID() );
}
}
pCurFront->next=pCur->next;
pFront->next=p->next;
p->next=pCurFront->next;
pCurFront->next=p;
pCur->next=pFront->next;
pFront->next=pCur;
}
cout<<"Result:"<<endl;
ShowAll(); //Print all the data.
}
}
}; /* Structure composing a table tree. */
然后,查看调试中的信息。
p 0x00000000
p->data {...}
pCur 0x00384128
pFront 0x00384230
stuID_min 0x0012fc74
this 0x0012fed8
pCurFront 0x00384128
如何CNode *p
成功使用积分?