Сбой при удалении узлов в круговом списке

У меня возникли некоторые проблемы с алгоритмом «очистки» узлов в круговом списке: в большинстве случаев происходит сбой программы, а иногда нет. Я совершенно уверен, что алгоритм в порядке, и я понятия не имею о решении … 🙁

Вот несколько кусочков кода:

clear() функция (Примечание: mFreenode является узлом «head-tail free» для кругового списка):

List* clear() {
if (mFreenode->getNext() != 0) {
Node<T>* current = mFreenode->getNext();
Node<T>* temp = 0;

while (current != mFreenode) {
temp = current->getNext();
delete current;
current = temp;
}
}

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

return this;
}

И это Node деструктор:

~Node() {
delete &item;
}

Любое предложение?

-2

Решение

Ваш деструктор выглядит очень подозрительно — я предполагаю, что item является переменной-членом Node, Если item это тип значения (например, int или же std::string), тогда вы не должны удалять его вообще. Если это указатель, то, возможно, вы должны делать delete item; — но только если узел имеет право собственности на элемент, на который он имеет указатель.

0

Другие решения

Когда ты delete item; вы не заставляете прежний узел указывать на узел после удаляемого вами узла. В результате узел Previus к тому, который вы удаляете, указывает на никуда.

0