【问题标题】:Bug in my Erase() function for linked list链表的 Erase() 函数中的错误
【发布时间】:2017-02-26 04:33:09
【问题描述】:

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

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

【问题讨论】:

  • 你应该提供问题的最小重现,这代码太多了。
  • 2参数擦除功能有问题,我不知道是什么
  • 一旦打印“第 7 行测试”,程序就会崩溃,并且永远不会到达 main 底部的“第 8 行测试”
  • 你甚至没有提供擦除功能。
  • @Kelm 这显然是第一个代码块

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


【解决方案1】:

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

left->next_ = right;

right->prev_ = left;

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

您可以在这些分配之前添加检查:

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

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-06-19
  • 1970-01-01
  • 2020-03-17
  • 1970-01-01
  • 2018-03-31
  • 1970-01-01
  • 2012-06-13
  • 1970-01-01
相关资源
最近更新 更多