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