У меня есть простой метод destructor
, который разрушает каждый узел, но у меня возникают некоторые проблемы. Всякий раз, когда я пытаюсь удалить элемент из связанного списка, элемент удаляется, но затем удаляются все следующие элементы. Моя программа вылетает, если я пытаюсь распечатать или добавить несколько элементов. После его сбоя мой текстовый редактор выделяет мой метод PrintNode
.Сбой связанного списка при уничтожении узлов
Вот мой destructor
метод:
Node::~Node() {
delete next;
}
Я удаление элементов из моего списка, используя этот метод:
Node*Node::DeleteNode(Node *head, string a) {
if (head == NULL) return head;
head->next = DeleteNode(head->next, a);
if (head->get()==a) {
Node* temp = head->next;
next = NULL;
delete head;
return temp;
}
else {
return head;
}
}
И тогда я простая печать:
void Node::PrintNode() {
cout << name << endl;
if (next) {
next->PrintNode();
}
}
Почему мой деструктор приводит к сбою моей программы?
ли вы отладки кода? Ваш деструктор вызывает 'delete next', который вызывает деструктор' next', который вызывает 'delete next;', который вызывает деструктор 'next', который вызывает' delete next; 'и т. Д. – PaulMcKenzie
Это очень неудобный способ реализации связанного списка. Класс 'Node' не должен иметь определяемого пользователем деструктора вообще. Удалите необходимые узлы в коде связанного списка, если это необходимо, а не автоматически. Что делать, если вы хотите удалить один узел из списка? Как вы предлагаете сделать это с классом «Node» с таким деструктором? – PaulMcKenzie
«Что делать, если вы хотите удалить один узел из списка?» Это похоже на мою проблему. –