C ++ Circular Link List — удалить все узлы

Я пытаюсь удалить все узлы в единственном круговом связанном списке. Но я получил следующую ошибку:

malloc: *** error for object 0x1005068f0: pointer being freed was not allocated

Следующее является функцией:

void StudentLinkList::removeAll() {
StudentData *traversePointer = this->head;

while (this->head != nullptr) {
this->head = this->head->getNext();
delete traversePointer;
traversePointer = nullptr;
traversePointer = this->head;
this->size--;
}
}

Я получаю ошибку в этой строке:

delete traversePointer;

Мой вопрос заключается в том, почему traversePointer не размещается в цикле while, как показано в ошибке?

-1

Решение

Время должно быть:

    while(this->size){

Когда цикл завершится, установите this-> head = nullptr. Нет необходимости устанавливать traversePoitner = nullptr в цикле.

Альтернативная версия (я еще не подтвердил это), которая не полагается на корректность this-> size, а только на то, что список является круглым:

void StudentLinkList::removeAll() {
if(this->head == nullptr)
return;
StudentData *traversePointer = this->head;
StudentData *deletePointer;
do{
deletePointer = traversePointer;
traversePointer = traversePointer->getNext();
delete deletePointer;
}while(traversePointer != this->head);
this->head = nullptr;
this->size = 0;
}
0

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector