我可以遍历一个在析构函数中带有头节点的链表吗?
Can I traverse a linked list with its head node in its destructor?
这似乎是一个愚蠢的问题,但我问的原因是因为我有这个析构函数:
list::~list()
{
for (node* next = headByName->nextByName; headByName; headByName = next)
{
delete headByName;
}
}
和valgrind仍然说我有内存泄漏。所以我想我真正的问题是:是我的析构函数编码错了,还是通过遍历它的头节点来销毁一个列表?
你的代码没有做正确的事情。
- 你从不改变
next
,所以headByName
在第一次迭代后不会改变。 - 如果在循环开始前headByName为
nullptr
,则在初始化时取消对nullptr的引用。
试试这个:
list::~list()
{
while (headByName)
{
node* next = headByName->nextByName;
delete headByName;
headByName = next;
}
}
既然你评论了for循环的偏好,作为for的粉丝,我尽可能地使用它,我想写一下如何使用for循环来实现这一点:
for(node* next; headByName; headByName = next)
{ next = headByName->nextByName;
delete headByName;
}
相关文章:
- 反向给定链表中的K节点
- 我们可以删除链表中静态内存中的节点吗
- 为什么C++对链表中的下一个节点使用指针,而像 C# 或 Java 这样的语言只使用类 Node 的名称?
- 如何按数字顺序插入链表节点?
- 为什么我的双向链表删除函数会删除多个节点?
- 创建了一个链表,但如何删除 c++ 中的"所有"节点
- 在C++的链表末尾插入一个节点
- 在解决链表问题时创建一个额外的节点是一个好习惯吗?
- 插入一个基本的单向链表节点似乎破坏了我的 c++ 代码?
- 修改链表主函数代码,用户将在其中输入节点的索引和数据以及正确的消息
- 删除链表中的特定节点
- 在 c++ 中,在链表节点上使用括号有什么意义?
- 在C++中删除双向链表的头节点后出现访问冲突异常
- 删除链表中的节点 - 分段错误
- 使用函数引用指向节点的指针删除链表中的节点?
- 节点链表中的对象
- 虚拟头节点链表
- C++ 删除类似的节点链表
- c++删除节点链表导致程序崩溃
- 排序节点(链表)c++