Debug ERROR!! 高手请进! 是不是delete pNode->param就删除了一部份申请的内存把你的结构与怎么申请结构的代码贴出来看看 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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;} 不用看了,你是在释放指针空间的时候出错的对吧! 答案:使用空间越界!回头找找,那里使用空间越界了!解释: new delete 在C编译器上 new的时候在空间结尾加标示的,删除时发现标识被改变了,编译器报错! 解释: new delete 在C编译器上 new的时候在空间结尾加标示的,删除时发现标识被改变了,编译器报错!没看懂,告诉我那里错了 pParam[i+1]='\0'有错,正确应该,pParam[i]='\0'。 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;} 你的代码太恐怖,结构定义也有问题,简单问题复杂化,迟早出问题!多谢你帮我分析我的算法都是优秀的,现在只是编码问题,除了deletelist外,链表的生成都跟踪过了没有错的, 真不知道怎么会越界的?http://www.csdn.net/expert/topic/594/594271.xml?temp=.5594599 编写打印程序时遇到的成员函数DrawInfo及MessageBox问题 BHO 监视网页事件,但是点击一个超链接,却得到多次OnClick事件,请高手相救 如何从B对话框中获得A对话框中树形控件中的项目数? 是不是有的sql命令在vc里边不能用啊?例如Order By和Min 如何注册三个键组合的热键 线程问题 如何在COM中返回一个自定义的ToolBar指针? 如何判断鼠标点击在树控件的图标上 (弱弱的问)在VC中如何获得当前的鼠标位置! word的doc文档转换成htm文件,为什么不行,代码如下 线程的同步问题 线程同步问题
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;
}
答案:使用空间越界!
回头找找,那里使用空间越界了!
解释: new delete 在C编译器上
new的时候在空间结尾加标示的,删除时发现标识被改变了,编译器报错!
new的时候在空间结尾加标示的,删除时发现标识被改变了,编译器报错!没看懂,告诉我那里错了
{
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;
}
多谢你帮我分析我的算法都是优秀的,现在只是编码问题,除了deletelist外,链表的生成
都跟踪过了没有错的,
http://www.csdn.net/expert/topic/594/594271.xml?temp=.5594599