[英]Memory Error with Circularly Linked List: pointer being freed was not allocated
程序運行並且測試確實成功,但是在列表和測試結果之間,我得到了這個:Assignment_2.2(10729,0x7fff78db0300)malloc: *對象0x7fb132d00000錯誤:未分配指針*在以下位置設置斷點malloc_error_break進行調試知道如何解決這個問題嗎?
main.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 */
當將tail-> next設置為head時,將按預期創建循環鏈接列表。 您的do while循環應檢查linkPtr!= head,而不是nullptr,因為您正在執行head free的雙重操作。 這是因為刪除指針不會使以前指向它的任何變量無效,因此您的循環最終將返回head。
實際上,如果沒有雙重釋放,您的代碼將陷入無限循環。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.