我正在尝试通过测试程序,并且我通过了所有测试,除了我的擦除功能,程序崩溃了。
我最好的猜测可能是正面或背面的前哨节点正在被删除。或内存泄漏。
答案 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;