C++循环链接列表 - 删除所有节点

C++ Circular Link List - remove all nodes

本文关键字:节点 删除 循环 链接 列表 C++      更新时间:2023-10-16

我正在尝试删除单循环链表中的所有节点。但是我得到以下错误:

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 应该是:

    while(this->size){

循环完成后,设置 this->head = nullptr。无需在循环中设置 traversePoitner = nullptr。

替代版本(我尚未确认这一点(,它不依赖于这个大小是正确的>,只是列表是循环的:

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;
}