链接列表的Erase()函数中的错误

时间:2017-02-26 04:33:10

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

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

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

1 个答案:

答案 0 :(得分: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;