循环链表的内存错误:未分配正在释放的指针
Memory Error with Circularly Linked List: pointer being freed was not allocated
程序运行并且测试确实成功,但是在列表和测试结果之间,我得到这个: assignment_2.2(10729,0x7fff78db0300) malloc:* 对象 0x7fb132d00000 的错误:未分配正在释放的指针 *在malloc_error_break中设置断点进行调试 知道我该如何解决这个问题吗?
主.cpp
#include "OLinkedList.h"
using namespace std;
int main(int argc, char** argv) {
OLinkedList CircleList;
CircleList.fillList(0);
CircleList.prntList();
CircleList.OTest();
return 0;
}
OLinkedList.h
#ifndef OLINKEDLIST_H
#define OLINKEDLIST_H
#include <iostream>
#include <iomanip>
using namespace std;
class OLinkedList{
private: struct Link{
int data;
Link *next;
};
Link *head;
Link *tail;
public: OLinkedList(){head = nullptr; tail = nullptr;};
~OLinkedList();
void fillList(int);
void prntList();
void OTest();
};
//Destructor for Class used to delete memory of list
OLinkedList::~OLinkedList(){
Link *linkPtr = head;
Link *nextPtr;
//traverses to the end of the list to delete memory
do
{
nextPtr = linkPtr->next;
delete linkPtr;
linkPtr = nextPtr;
}while(linkPtr!= nullptr);
}
//
void OLinkedList::fillList(int size){
Link *front = new Link; //create first link
head = front; //set first link = to traversal
head->data = size++; //Fill the front with data
head->next = nullptr; //Point the front to no where
Link *temp = head;
do{
Link *end = new Link; //Create a new link
end->data = size++; //Fill with data
end->next = nullptr; //Point to no where
temp->next=end;//Previous link will point to the end
temp=end; //Now this has become previous link
tail = end;
tail->next = head;
}while(size < 10); //Repeat until filled
}
void OLinkedList::prntList(){
Link *linkPtr;
linkPtr = head;
int i = 0;
do{
cout<<" "<<setprecision(3)<<linkPtr->data;
linkPtr = linkPtr->next;
i++;
}while(i < 10);
}
//Used to prove list is circular
void OLinkedList::OTest(){
Link *linkPtr = tail->next;
cout<<"nAfter "<<tail->data<<" is "<<linkPtr->data;
}
#endif /* OLINKEDLIST_H */
当您在 head 旁边设置 tail-> 时,您正在按预期创建一个循环链表。你的 do while 循环应该检查 linkPtr != head,而不是 nullptr,因为你正在对 head 进行双重释放。这是因为删除指针不会使之前指向它的任何变量无效,因此您的循环最终将返回到 head。
事实上,如果不是因为双重释放,你的代码将进入无限循环。
相关文章:
- 将指针分配给另一个指针时会发生什么情况?
- C++将一个指针分配给另一个指针时执行的类型检查
- 我似乎无法为指针分配一个数组,然后更改数组的内容
- C++为 void 指针分配一个字符串
- 当我在 C++ 中将派生类的指针分配给指针时,地址会更改
- MPI 集合通信中的指针分配
- 函数指针分配在创建 DLL 后导致错误
- 通过双指针分配指针
- C++编译时使用 constexpr 字符数组指针分配静态数组?
- 我可以直接为指针分配地址吗?如果是,如何做到这一点
- 为什么为char指针分配内存不会截断char序列
- C++指针分配字符数组的地址
- 将 void 指针分配给另一个 void 指针
- 如何将不同的成员函数指针分配给注册类的不同实例?
- 如何为指针分配特定的内存地址?
- C++ - 无法将顶部常量指针分配给另一个非常量指针
- 将指针分配给另一个指针时会发生什么情况?
- 为指向C++中的对象/对象的指针分配堆内存
- 将指针分配给字符串变量中包含的地址
- 当直接分配时,为什么此功能指针分配起作用,而不是与有条件的操作员一起使用