循环列表,删除节点

时间:2014-02-04 20:26:35

标签: c++ debugging

我有一个这样的节点:

Node(T data, Node *next, Node *prev)
{
    this->data = data;
    this->next = next;
    this->prev = prev;
};

我的删除看起来像,我正在循环并尝试迭代每个项目,然后删除它是否是正确的...

bool remove(const T& item) // requires == operator of item
{
    if (current == nullptr)
    {
        throw string("Can't remove from empty list!");
    }


    for (int i = 0; i < nrOfNodes; i++)
    {
        Node *iterator = current->prev;
        if (iterator->next->data == item)
        {
            Node* iteratorAfter = iterator->next->next;
            iteratorAfter->prev = iterator;

            delete iterator->next;

            iterator->next = iteratorAfter;

            return true;
        }

        iterator = iterator->next;
    }

    return false;
};

然而,它给了我:

  

Upp2.exe中0x0F5D31CA(msvcr120d.dll)的未处理异常:   0xC0000005:访问冲突写入位置0xFEEEFEEE。

但我无法弄清楚我做错了什么......

1 个答案:

答案 0 :(得分:0)

很难说出你做错了什么,因为你还没有显示出这个程序中涉及的完整代码。例如,变量&#39; current&#39;的声明和定义。不见了。 请注意,&#39;当前&#39;未在&#39;删除&#39;中更新功能。因此,即使它在此函数的入口处具有有效值,假设列表中的节点数量至少为2,该函数可能会在for循环的第一行上发生段错误。这将在循环的第二次迭代中发生,因为在for循环中if块的3&lt; rd行上的前一次迭代中发生了删除。