删除指针时,未分配被释放的 C++ 指针错误

c++ pointer being freed was not allocated error when deleting pointer

本文关键字:指针 释放 错误 C++ 分配 删除      更新时间:2023-10-16

我是c++的新手,我想删除链表中的最大值。但是我收到了错误消息。这是删除最大值并返回已删除值的函数。在运行"删除cur"行时,我收到错误消息。请有人帮帮我!

int removeMax(Dnode*& list) {
Dnode *p = list->next;
Dnode *cur = list;
int max = list->info;
while (p != NULL) {
    if (p->info > max) {
        max = p->info;
        cur = p;
    }
    p = p->next;
}
if(cur->back == NULL && cur != NULL){
    Dnode *after = cur->next;
    after->back = NULL;
    delete cur;
}
else if(cur->next == NULL && cur != NULL){
    Dnode *pre = cur->back;
    pre->next = NULL;
    delete cur;
}
else{
    Dnode *pre = cur->back;
    Dnode *after = cur->next;
    pre->next = cur->back;
    after->back = pre;
    delete cur;
}
return max;

}

您的list在功能上没有更新,如果最高元素排在列表中,removeMax在擦除最高元素后崩溃。

// removing first element
if(cur->back == NULL && cur != NULL){
  Dnode *after = cur->next;
  list = after;                 // you need update your list 
  after->back = NULL;
  delete cur;
}

错误可能是,而且很可能是其他地方,但至少最终需要修复。而不是

pre->next = cur->back;

这让上一个节点指向自身,它应该是

pre->next = after;

最后的 else 也不会检查cur是否有效。将整个零件包裹成

if (cur != NULL) {
    if (cur->back == NULL)
    // ...
}