C++ 循环列表-删除所有给定值

C++ 循环列表-删除所有给定值,c++,list,C++,List,我有一个函数,它假设从循环列表中删除所有给定的值。问题是每次我试图删除相邻的值时,程序都会崩溃。例如: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->v

我有一个函数,它假设从循环列表中删除所有给定的值。问题是每次我试图删除相邻的值时,程序都会崩溃。例如:
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);
    }

剩下的全部代码:

用破折号表示NULL,小写字母表示字段,大写字母表示元素指针,我们用pastebin显示的代码构建了一个列表:

h:-,t:-

插入标题(1)

h:A,t:A和A:p:-,1,n:-

插入标题(2)

h:B,t:A与A:p:B,1,n:-和B:p:A,2,n:A

这里有一个符号问题。为什么A.n仍然为空? 它可能很快就会崩溃,例如在前向迭代中。
您对连续值的关注是有误导性的。

对于表示NULL的破折号,小写字母表示字段,大写字母表示元素指针,我们使用pastebin显示的代码构建了一个列表:

h:-,t:-

插入标题(1)

h:A,t:A和A:p:-,1,n:-

插入标题(2)

h:B,t:A与A:p:B,1,n:-和B:p:A,2,n:A

这里有一个符号问题。为什么A.n仍然为空? 它可能很快就会崩溃,例如在前向迭代中。
您对连续值的关注有误导性。

它在哪里崩溃?如果您使用调试器,您可以找到调试器的位置,可能还有原因。调试器在
while(temp->prev!=l.tail)行崩溃,但我不知道why@zimek-atomek您是否在使用调试器单步执行代码时查看了存储在这些变量中的值?请检查
temp
,确保它指向有效内存(即,在变量崩溃之前调试并检查该变量)。@crashmstr好的,现在我明白了,但我如何修复它?它在哪里崩溃?如果您使用调试器,您可以找到调试器的位置,可能还有原因。调试器在
while(temp->prev!=l.tail)行崩溃,但我不知道why@zimek-atomek您是否在使用调试器单步执行代码时查看了存储在这些变量中的值?请检查
temp
,确保它指向有效内存(即,在变量崩溃之前调试并检查该变量)。@crashmstr好的,现在我明白了,但我如何修复它?