【发布时间】:2023-04-20 13:18:02
【问题描述】:
我已经确定我从链表中删除节点的删除函数是问题所在,但我不明白为什么。
void LinkedList::remove(string license){
moveToHead();
while(currentPtr != NULL){
if(getCurrent().get_licence() == license){
if(currentPtr == headPtr){
removeFromHead();
}else if(currentPtr == tailPtr){
removeFromTail();
}else{
currentPtr->getNext()->setPrev(currentPtr->getPrev());
currentPtr->getPrev()->setNext(currentPtr->getNext());
delete currentPtr;
currentPtr = headPtr;
}
}
forward();
listLength--;
}
moveToHead();
}
moveToHead() 将我当前的指针移动到 head 并且 forward() 将它移动到列表中的下一项。
代码运行没有问题,但是在它完成运行后我得到一个segmentation fault (core dumped),而不是在使用remove() 时崩溃
【问题讨论】:
-
你试过调试器吗?
-
代码运行没有问题 -- 我的车启动并行驶,但无法停止。
-
请发帖minimal reproducible example。您损坏了内存,但直到您的程序最终崩溃时您才意识到这一点。类似于那辆车启动、行驶,当你试图停下来时,一切都最终崩溃了。
-
你的代码有一些设计缺陷,我建议你重新发明你的代码。特别是不要将指针用作while循环的控制工具。最好使用
case而不是if...else,并确保始终使用“安全”default条件。