Я пытаюсь удалить все узлы в единственном круговом связанном списке. Но я получил следующую ошибку:
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, как показано в ошибке?
Время должно быть:
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;
}
Других решений пока нет …