c++ - 我的链表的 Erase() 函数中的错误

标签 c++ linked-list doubly-linked-list

我正在尝试通过一个测试程序,并且我通过了所有测试,除了涉及到我的删除功能时,程序崩溃了。

我最好的猜测可能是前面或后面的哨兵节点正在被删除。或内存泄漏。

最佳答案

我怀疑有人愿意阅读所有这些代码并为您找到错误,尤其是在没有 MCVE 的情况下。 .乍一看,函数 void erase(iterator it)

明显有问题

left->next_ = right;

right->prev_ = left;

您没有检查 right 或 left 是否为 null,如果您在列表的开头或结尾删除,则会发生这种情况。您还应该相应地修改列表的 front_back_

您可以在这些作业之前添加检查:

if(left)
    left->next_ = right;
else
    front_ = right;

if(right)
    right->prev_ = left;
else
    back_ = left;

关于c++ - 我的链表的 Erase() 函数中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42464780/

相关文章:

c++ - 如何将单向链表转化为循环链表

c - 循环链表删除中的垃圾值

c - 根据其内容从双向链表中删除结构(C 语言)

java - java中删除双向链表中的两个节点时出错

c++ - 如何使用引用传递的值进行更新以删除双链表中的出现

c++ - 用它的大小缩放滚动球控件

c++ - 视频对象链表插入函数

c++ - 'unsigned long int' 和 'unsigned long long int' 赋值问题

c++ - C++中的特征库是否有动态 vector 或矩阵

c++ - 为什么mpfr_printf与printf的十六进制 float (%a转换说明符)不同?