是不是delete pNode->param就删除了一部份申请的内存
把你的结构与怎么申请结构的代码贴出来看看

解决方案 »

  1.   

    typedef struct SearchNode {
    char type; //指令类型
    char *param; //指令参数
    SearchNode *limit; // 限定类型指令          
    SearchNode *next;
    }SearchNode, *PSearchNode;
    PSearchNode MakeQueryList(char *pSm/*in*/) 
    {
    PSearchNode pHead,pNode,pNextNode;
    int i=0;
    char *pCurrent=pSm,*pParam;                     //指向短消息的当前字符 pHead=(PSearchNode)new BYTE(SizeNode);         //head存放表头
        pNode=pHead;
    pNode->limit=NULL;
    pNode->next=NULL;
    pNode->param=NULL;
    pNextNode=pHead;
    //指令举例
    //1L1q上海z北京t12 16j<100
    if(*pCurrent!='1') //是查询吗,不是返回false
    {
    DeleteList(pHead);
    return false;       
    }
    pCurrent++; if(*pCurrent!='l'||*(pCurrent+1)!='1')           //只考虑列车l1表示列车
    {
    DeleteList(pHead);
    return false;
    } while(*pCurrent!='\0')     //生成查询链表
    {
    if(!IsCmd(pCurrent))                //在指令数组中查找
    {
    DeleteList(pHead);
    return false;
    }
    else
    pNode->type=*pCurrent++;        //存入指令类型
    //保存参数
    while(!IsCmd(pCurrent+i))             
    i++;
    pParam=new char[i+1];               
    strncpy(pParam,pCurrent,i);          
    pCurrent=pCurrent+i;
    pParam[i+1]='\0'; 
    pNode->param=pParam;

    i=0;
    if(*pCurrent!='e')                                          
    {
    pNextNode=(PSearchNode)new BYTE(SizeNode);  //分配空间
    pNode->next=pNextNode;
    pNode=pNextNode;
    }
    else                                         //链表生成完毕        
    {
    pNode->next=NULL;                             
    pCurrent++;
    }
       }
    return pHead;
    }
      

  2.   

    不用看了,你是在释放指针空间的时候出错的对吧!
     答案:使用空间越界!
    回头找找,那里使用空间越界了!
    解释: new delete 在C编译器上 
      new的时候在空间结尾加标示的,删除时发现标识被改变了,编译器报错!
      

  3.   

    解释: new delete 在C编译器上 
      new的时候在空间结尾加标示的,删除时发现标识被改变了,编译器报错!没看懂,告诉我那里错了
      

  4.   

    pParam[i+1]='\0'有错,正确应该,pParam[i]='\0'。
      

  5.   

    if(*pCurrent!='e')                                          
            {
                pNextNode=(PSearchNode)new BYTE(SizeNode);  //分配空间
    //是否此处没有对pNextNode的子指针初始化?
                pNode->next=pNextNode;
                pNode=pNextNode;
            }建议写一函数
    PSearchNode NewSearchNode()
    {
        PSearchNode pNode=(PSearchNode)new BYTE(SizeNode);
        pNode->limit=NULL;
        pNode->next=NULL;
        pNode->param=NULL;
        return pNode;
    }
      

  6.   

    你的代码太恐怖,结构定义也有问题,简单问题复杂化,迟早出问题!
    多谢你帮我分析我的算法都是优秀的,现在只是编码问题,除了deletelist外,链表的生成
    都跟踪过了没有错的,
      

  7.   

    真不知道怎么会越界的?
    http://www.csdn.net/expert/topic/594/594271.xml?temp=.5594599