0

我正在编写一个项目——学生信息的 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成功使用积分?

4

0 回答 0