【发布时间】:2017-03-28 17:44:05
【问题描述】:
我有一个函数可以从我的循环列表中删除所有给定的值。问题是每次我尝试删除彼此相邻的值时程序崩溃。例如:list: 0,7,9,9,8 当我想删除值 9 时程序崩溃。
功能:
void removeAllValue(List2W& l, int x){
if(isEmpty(l))
return;
Element *temp = l.head, *del;
int i;
if ( l.head->value == x ){
temp = temp->next;
deleteHead(l, i);
}
do {
if ( temp->value == x ){
if ( l.tail == temp ) {
temp = temp->next;
deleteTail(l, i);
return;
}
del = temp;
temp = temp->next;
del->next->prev = del->prev;
del->prev->next = del->next;
delete del;
} else {
temp = temp->next;
}
} while ( temp->prev != l.tail);
}
剩余的全部代码:https://pastebin.com/57SeC0uK
【问题讨论】:
-
在哪里崩溃了?如果你使用你的调试器,你可以找出在哪里,可能还有原因。
-
它在
while ( temp->prev != l.tail);线上崩溃了,但我不知道为什么 -
@zimek-atomek 您是否在使用调试器单步执行代码时查看了存储在这些变量中的值?
-
检查
temp并确保它指向有效内存(即在该变量崩溃之前调试和检查该变量)。 -
@crashmstr 好的,现在我明白了,但我该如何修复它?