C++について学びたいと思います。メモリ管理とデストラクタの概念に問題があります。リンクリストを使用してキューインプリメンテーションを作成しようとしましたが、デストラクタメソッド(太字)でリンクリストノードを削除しようとすると「Aborted(Core Dumped)」エラーメッセージが表示されます。誰かが私が間違っていることを知っているなら、私に知らせてください!ここで 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;
}
}
そして、ここに私の完全なLinkedListのキューの実装の参考のために:
EDITtemplate <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; '?あなたはあなたのコードで何度も似たようなことをしています。 –
私は何をしていますか?私はここで犠牲になっています - あなたが私のEDITを見るなら、私はデストラクタのために何か違うことを試みましたが、あなたのデストラクタだけでなく、あなたの*完全なリンクリストのキューインプリメンテーションでも "Aborted(Core Dumped)"エラー – mathmonkey
あなたは似たような間違いをしています。 –