我想把链表中的数据全部删除,应该怎么做呢?
直接delete pHead好像不行吧?
正确的方法应该怎么处理?

解决方案 »

  1.   

    同上  遍历链表一个一个删 最后再把头结点free掉
      

  2.   

    POSITION pos = list.GetHeadPosition();while(pos)
    {
    delete list.GetNext(pos);
    }list.RemoveAll();
      

  3.   

    LineLink* p = pHead->pNext;
    while(p != NULL)
    {
    if(pHead->pNext != NULL)
    {
    pHead->pNext = pHead->pNext->pNext;
    delete p;
    p = pHead->pNext;
    }
    }
    看看上面的代码有什么问题,总在执行循环当中有错误,程序崩溃
      

  4.   

    LineLink* p = pHead;
    LineLink *pLs;
    while(p != NULL)
    {
          pLs = p->pNext;
          delete p;
          p = pLs;
    }
      

  5.   

    LineLink* p = pHead->pNext;
    while(p != NULL)
    {
    if(pHead->pNext != NULL)
    {
    pHead->pNext = pHead->pNext->pNext;
    delete p;
    p = pHead->pNext;
    }
    }
    当pHead->pNext指向最后一个结点的时候,pHead->pNext->pNext没有了,就出错了
      

  6.   

    LineLink* q = pHead;
    LineLink* p = pHead->pNext;
    while(q != NULL)
    {
    delete q;
             q=p;
             if(p->p->pNext!=NULL)
                 p=p->pNext;}
      

  7.   

    pioneer_public() 和jamesjinyongming() 的方法理论上都没问题,但还是在执行过程中出现错误:
    Debug Assertion Fieied!
    Expression:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
    "终止"  “重试” “取消”谁知道什么问题?
      

  8.   

    LineLink* p = pHead;
    LineLink *pLs;
    while(p != NULL)
    {
      pLs = p->pNext;
      delete p;
      p = pLs;
    }
    if(pHead != NULL)
    delete pHead;
    以上是修改后的代码,删除头节点了,但还是出现上面说的错误
      

  9.   

    struct NODE
    {
    double x;
    double y;
    };
    struct LineStruct
    {
    int nFID; //fearuteID
    int  nNodeNum;
    NODE startNode;
    NODE endNode;
    double dDistance; //线的长度,一般单位为公里
    //属性字段
    int nLinkID;
    int nSNodeID;
    int nENodeID;
    int nRoadClass;
    int nBuildingPlan;
    int nTunnel;
    int nBridge;
    int nMedianStrip;
    int nLines;
    int nWidth;
    CString sRoadName;};
    //链表
    struct LineLink
    {
    LineStruct lineStruct;
    LineLink * pNext;
    };//向链表中添加元素
    void CMapDiffersView::AddtoLineLink(LineLink *head,LineStruct lineStruct)
    {
    LineLink *T = head;
    LineLink *pNewLink = new LineLink ;
    pNewLink->pNext = NULL;
    memcpy((void*)(&pNewLink->lineStruct),(void*)(&lineStruct),sizeof(lineStruct));
    BOOL added = FALSE;

    //先比较head头节点
    if(head->lineStruct.startNode.x > pNewLink->lineStruct.startNode.x)
    {
    pNewLink->pNext = head;
    head = pNewLink;
    return;
    }
    else if(head->pNext == NULL)
    {
    head->pNext = pNewLink;
    return;
    }

    while(head->pNext != NULL)
    {
    if((head->pNext->lineStruct.startNode.x > pNewLink->lineStruct.startNode.x)
    /* &&(head->pNext->lineStruct.startNode.y > pNewLink->lineStruct.startNode.y)*/)
    { pNewLink->pNext = head->pNext;
    head->pNext = pNewLink;
    added = TRUE;
    break;
    }
    head = head->pNext;
    }
    if(!added)
    {
    head->pNext = pNewLink;
    }
    head = T;
    }
    LineLink* CMapDiffersView::CreateLineLink(LineLink *head,LineStruct lineStruct)
    {
    head->pNext = NULL;
    head->lineStruct.nFID = lineStruct.nFID;
    head->lineStruct.nLinkID = lineStruct.nLinkID;
    head->lineStruct.dDistance = lineStruct.dDistance;
    head->lineStruct.startNode.x = lineStruct.startNode.x;
    head->lineStruct.startNode.y = lineStruct.startNode.y;
    head->lineStruct.endNode.x = lineStruct.endNode.x;
    head->lineStruct.endNode.y = lineStruct.endNode.y;

    head->lineStruct.nNodeNum = lineStruct.nNodeNum;
    head->lineStruct.nBridge = lineStruct.nBridge;
    head->lineStruct.nBuildingPlan = lineStruct.nBuildingPlan;
    head->lineStruct.nLines = lineStruct.nLines;
    head->lineStruct.nMedianStrip = lineStruct.nMedianStrip;
    head->lineStruct.nRoadClass = lineStruct.nRoadClass;
    head->lineStruct.sRoadName = lineStruct.sRoadName;

    return head;}
    下面是调用的代码
    //添加到链表
    if(m_lineHead1 == NULL)
    {
    m_lineHead1 = new LineLink;
    CreateLineLink(m_lineHead1,lineStruct1);
    }
    else
    {
    AddtoLineLink(m_lineHead1,lineStruct1);
    }
    以上是相关的部分函数,不是我不贴,是太长了
      

  10.   

    LZ 看上面的代码没有问题的 你的问题是出在对一个指针的非法操作上,很可能是delete一个野指针,你自己好好。
    要是方便的话把代码发我邮箱里吧
    [email protected]