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-&gt;link时也会发生同样的情况 赋值是在指针上执行的,而不是被删除的对象。 while (now) nxt = now-&gt;next; delete now; now = nxt; 是迭代和删除链表的正确(和惯用)方式。问题中的新代码有问题,因为它继续使用已删除的对象。

以上是关于C++ 链表 - 释放节点给出错误的主要内容,如果未能解决你的问题,请参考以下文章

段错误:链表节点插入函数 [C++]

类链表类的析构函数的双重释放错误

malloc与new

C++ - 链表 - 复制构造函数

“从链接列表中删除循环”中的运行时错误

C++,释放已经释放不会产生编译器错误