C++ 链表 - 释放节点给出错误
Posted
技术标签:
【中文标题】C++ 链表 - 释放节点给出错误【英文标题】:C++ Linked list - Deallocating node gives error 【发布时间】:2016-03-06 07:23:32 【问题描述】:我创建了一个链接列表。插入和遍历工作正常。下面给出的是我正在释放节点的部分。我有三个指针now, nxt, start
,它们的数据类型都是node (the structure)
now=start;
for(int i=0;i<n;i++)
nxt=now->link;
delete now->link;
now=nxt;
start
存储第一个节点的地址,now
存储当前正在处理的节点的地址,nxt
存储从地址@的节点的链接部分访问的下一个节点的地址987654327@.
当我尝试执行程序时,直到删除正常,当它到达删除时,程序崩溃并给出“标题:停止工作”错误。代码有什么问题?
【问题讨论】:
你现在创建了吗->链接“新”声明? 你确定链表有准确的n
节点吗?
是的,链表有n个节点
【参考方案1】:
我想这就是问题所在:
delete now;
now=nxt;
您删除某些内容,然后对其执行分配。
【讨论】:
删除now->link
时也会发生同样的情况
赋值是在指针上执行的,而不是被删除的对象。 while (now) nxt = now->next; delete now; now = nxt;
是迭代和删除链表的正确(和惯用)方式。问题中的新代码有问题,因为它继续使用已删除的对象。以上是关于C++ 链表 - 释放节点给出错误的主要内容,如果未能解决你的问题,请参考以下文章