我想了解C++,我遇到了內存管理和析構函數的問題。我嘗試使用鏈接列表編寫隊列實現,當我試圖在析構函數方法中刪除鏈接列表節點(粗體)時,我收到「中止(核心轉儲)」錯誤消息。如果有人知道我做錯了什麼,請告訴我!C++ LinkedList隊列實現和析構函數錯誤:「Aborted(Core Dumped)」
下面是我的析構函數方法的代碼:
template <class T>
Queue<T>::~Queue(){
Node<T> *currHead = head;
while(currHead != NULL){
Node<T> *nextHead = currHead->next;
delete currHead;
currHead = nextHead;
}
Node<T> *currTail = tail;
while(currTail != NULL){
Node<T> *nextTail = currTail->next;
delete currTail;
currTail = nextTail;
}
}
以供參考這裏是我的全部鏈表隊列實現:
template <class T>
class Node{
public:
T data;
Node<T> *next=NULL;
};
template <class T>
class Queue{
public:
Queue();
~Queue();
void push(T);
T pop();
int size=0;
Node<T> *head=NULL;
Node<T> *tail=NULL;
};
template <class T>
Queue<T>::Queue(){}
template <class T>
Queue<T>::~Queue(){
Node<T> *currHead = head;
while(currHead != NULL){
Node<T> *nextHead = currHead->next;
delete currHead;
currHead = nextHead;
}
Node<T> *currTail = tail;
while(currTail != NULL){
Node<T> *nextTail = currTail->next;
delete currTail;
currTail = nextTail;
}
}
template <class T>
void Queue<T>::push(T data){
Node<T> *node = new Node<T>;
node->data = data;
if(head == NULL){
head = node;
}else{
tail->next = node;
}
tail = node;
size++;
}
template <class T>
T Queue<T>::pop(){
if(size == 0){
throw "Empty Queue";
}else{
Node<T> *oldHead = head;
T oldData = oldHead->data;
head = head->next;
size--;
delete oldHead;
return oldData;
}
}
編輯:
我也嘗試了以下定義對於析構函數,但我得到相同的錯誤:
template <class T>
Queue<T>::~Queue(){
while(head != NULL){
Node<T> *currHead = head;
head = head->next;
delete currHead;
}
while(tail != NULL){
Node<T> *currTail = tail;
tail = tail->next;
delete currTail;
}
}
'currHead = nextHead;''delete'currHead;''之後''你在代碼中多次做類似的東西。 –
我該怎麼做?我在這裏感到茫然 - 如果你看到我的編輯,我嘗試了一些不同的析構函數,但我仍然不僅在你的析構函數中獲取「Aborted(Core Dumped)」錯誤 – mathmonkey
,即使在你的* full鏈表隊列實現中*你正在犯一個類似的錯誤。 –