【问题标题】:Cycled list - removing all given values循环列表 - 删除所有给定值
【发布时间】: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 好的,现在我明白了,但我该如何修复它?

标签: c++ list


【解决方案1】:

使用代表 NULL 的破折号、字段的小写字母和元素指针的大写字母,我们构建了一个列表,其中包含通过 pastebin 显示的代码:

h:-,t:-

insertHead(1)

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

insertHead(2)

h:B,t:A with A:p:B,1,n:- and B:p:A,2,n:A

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    • 2022-12-31
    • 2020-11-12
    相关资源
    最近更新 更多