C++ 删除循环列表中的节点时崩溃

C++ 删除循环列表中的节点时崩溃,c++,memory-management,nodes,circular-list,C++,Memory Management,Nodes,Circular List,我在循环列表中“清除”节点的算法中遇到了一些问题:大多数时候程序崩溃,有时甚至没有。我非常确定算法是正确的,我对解决方案没有任何线索…:-( 以下是一些代码: clear()函数(注意:mFreenode是循环列表的“无头尾”节点): 有什么建议吗?您的析构函数看起来非常可疑--我假设项是节点的成员变量。如果项是值类型(例如int或std::string),则不应删除它。如果它是指针,则可能应该执行删除项;——但前提是节点拥有其指针指向的项的所有权。当您删除项;时,您不会使previus节点指向

我在循环列表中“清除”节点的算法中遇到了一些问题:大多数时候程序崩溃,有时甚至没有。我非常确定算法是正确的,我对解决方案没有任何线索…:-(

以下是一些代码:

clear()
函数(注意:
mFreenode
是循环列表的“无头尾”节点):


有什么建议吗?

您的析构函数看起来非常可疑--我假设
节点
的成员变量。如果
是值类型(例如
int
std::string
),则不应删除它。如果它是指针,则可能应该执行
删除项;
——但前提是节点拥有其指针指向的项的所有权。

当您
删除项;
时,您不会使previus节点指向删除节点后的节点。因此,节点previus对于您删除的链接,指向任何地方。

请不要使用循环链接列表执行以下操作:

while (current != mFreenode) {
            temp = current->getNext();
            delete current;
            current = temp;
        }
为什么您认为它是一个循环链表?因为尾部节点指向第一个,所以当您这样做时,循环将继续并删除除当前节点之前的节点以外的所有节点。 然后你试图访问它,这是个坏主意:

mFreenode->setNext(0);
    mFreenode->setPrev(0);

我有一个建议。不要实现循环列表,尤其是这样。“我很确定算法是正确的”……嗯,我以为你说不是。节点是如何实现的?@Cat Plus:我必须实现循环列表用于学术目的。
while (current != mFreenode) {
            temp = current->getNext();
            delete current;
            current = temp;
        }
mFreenode->setNext(0);
    mFreenode->setPrev(0);