删除指针时,未分配被释放的 C++ 指针错误
c++ pointer being freed was not allocated error when deleting pointer
我是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)
// ...
}
相关文章:
- 正在理解智能指针,但出现错误:未分配正在释放的指针
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- 如何在向量中释放指针?
- 在C++中释放内存期间,迭代器与指针有何不同
- 包含矢量指针的结构的内存释放问题
- 错误:malloc:对象 0x7f9edf504080 的 *** 错误:未分配正在释放的指针
- 给定一个指向堆分配内存的指针,智能指针实现如何为其找到合适的释放函数?
- 使用共享指针时,从共享指针本身释放内存的机制是什么
- 我是否需要在 c++ 中从本地指针中释放分配的内存?
- 未分配释放C++(C 字符串)指针
- 未分配被释放的指针(将堆栈实现为链表时)
- Unique_ptr:在列表中放置时未分配释放的指针
- 释放 std::vector 中指针内存的最有效方法是什么?
- 使用删除与智能指针释放内存以及释放内存的正确方法
- 类析构函数和指针释放
- 使用指向数组元素的指针释放内存
- 使用指针算术和指向该结构的元素的指针释放该结构
- 类中的指针/释放内存
- 矩阵指针释放问题
- 从不同类型的指针释放内存是否安全