各位帮帮看看,用delete删除一个链表时为什么会出错?在线等

wazguo 2007-05-26 06:57:19
struct MM
{
int count;
struct MM * next;
}
struct GG
{
int a;
struct MM * head;
}
void addnode(struct GG * gg)
{
struct MM * p1 = gg->head;
for(int i = 0; i < 11 ; i ++)
{
struct MM * p2 = new struct MM;
p1->next = p2;
p1 = p2;
}
}

void deletenode(strcut MM * mm)
{
if(mm->next != NULL)
deletenode(mm->next);
delete mm;      // 在.net环境下说,用户未处理异常
}
程序只要运行到 最后一句就报错.
...全文
327 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wazguo 2007-07-06
  • 打赏
  • 举报
回复
谢谢各位的支持了 ,由于本人的疏忽结贴时间有点晚了 ,原因找到了,我 的链表是在dll中生成的 ,所以也要有dll释放。
再次谢谢各位,散分 。
hjon 2007-05-30
  • 打赏
  • 举报
回复
mark
漂白猪 2007-05-30
  • 打赏
  • 举报
回复
补充一下,删除当前节点后,同时要更新父节点的next = NULL
否则同样会出错
漂白猪 2007-05-30
  • 打赏
  • 举报
回复
因为其中一个节点的next没有初始化为null,而且没有分配过内存,删除一个不能删除的指针出错,就是这样
p2->next = NULL; //加这一句试试,这样就可以了

因为C++的编译器delete NULL不会出错,呵呵
star119119 2007-05-29
  • 打赏
  • 举报
回复
void addnode(struct GG * gg)
{
struct MM * p1 = gg->head;
for(int i = 0; i < 11 ; i ++)
{
struct MM * p2 = new struct MM;
p1->next = p2;
p2->next = NULL; //加这一句试试
p1 = p2;
}
}
IMGGTOO 2007-05-29
  • 打赏
  • 举报
回复
我测试了下,应该是没有问题的啊。
如果是缺少这一句:p2->next = NULL; //加这一句试试
在if 里面就会出错。

另外,楼主要说明白点,delete mm; 这句,会运行多次的,到底是第几次运行到这时才出的错。我怀疑是最后一次删除头节点的出错了,可能是因为你的头节点在定义的时候,并不是通过new为他动态申请了空间,结果导致删除出错。
比如这里:struct MM * p1 = gg->head;如果p1是被作为了头节点,删除的时候可能就会出错。
cosobin 2007-05-29
  • 打赏
  • 举报
回复
void deletenode(strcut MM * mm)
{
if(mm!=NULL)
{
if(mm->next!=NULL)
deletenode(mm->next);
else
delete mm;
}
}
blueoceanli 2007-05-29
  • 打赏
  • 举报
回复
cnlzx 2007-05-27
  • 打赏
  • 举报
回复
你调试下,看看delete对象那里的指针是类似未初始化的值吗?这是一种情况,
另外,如果确实是你new得到的指针那么估计就是你在其他的代码里对那个节点的操作出现越界、溢出的问题了,也要检查下
wssssw 2007-05-26
  • 打赏
  • 举报
回复
楼主传入addnode的实参是怎样的,估计是传入的参数有问题吧,有没有初始化一下
struct MM * p1 = gg->head;
加上这句gg->head->next = NULL ;

另外的p2->next = NULL ;也要加上
wazguo 2007-05-26
  • 打赏
  • 举报
回复
恩,变量是全局的,我在实际代码中也加了
p2->next =NULL;
sanqizhang 2007-05-26
  • 打赏
  • 举报
回复
变量应该是全局的吧
celftj 2007-05-26
  • 打赏
  • 举报
回复
void addnode(struct GG * gg)
{
struct MM * p1 = gg->head;
for(int i = 0; i < 11 ; i ++)
{
struct MM * p2 = new struct MM;
p1->next = p2;
p2->next = NULL; //加这一句试试
p1 = p2;
}
}

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧