私はスタック上で基本的なプッシュとポップを行うプログラムに取り組んでいます。私はGDBのプログラムを踏んだことがあり、プログラムはfreeTheMemory関数の5行目に達するまで完全に動作します。プログラムがそこに着くたびに、それは私にコアダンプを与える:私はコア・ダンプを取得していますところそれがなら関数freeTheMemoryでポインタを削除した後にコアダンプが表示されるのはなぜですか?
#include<iostream>
using namespace std;
class linkedList{
public:
int content;
linkedList* pointerToBelow;
};
void freeTheMemory(linkedList *above){
if(above!=nullptr){
linkedList* temp;
temp=above;
above=above->pointerToBelow;
delete temp;
freeTheMemory(above);
}
}
void push(linkedList* above, linkedList* below, int x){
below->content=x;
above->pointerToBelow=below;
below=above;
above=new linkedList;
return;
}
void pop(linkedList* above, linkedList* below){
linkedList* temp;
temp=above;
above=below;
below=below->pointerToBelow;
delete temp;
return;
}
void printList(linkedList *above){
linkedList* temp;
temp=above;
above=above->pointerToBelow;
while(above!=nullptr){
cout<<above->content<<" ";
above=above->pointerToBelow;
}
above=temp;
}
int main(){
linkedList *above, *below;
int x;
above=new linkedList;
below=new linkedList;
below->pointerToBelow=nullptr;
cout<<"Enter the elements of your list: ";
while(x!=-9){
cin>>x;
if(x!=-9){
if(x>0){
push(above, below, x);
}
else{
pop(above, below);
}
}
}
printList(above);
freeTheMemory(above);
return 0;
}
、問題は私のコードである場合ということですか?もしそうなら、誰がここで何がうまくいかないのか考えていますか?ありがとう
新しい 'linkedList'を作成するときに' pointerToBelow'を初期化することはありません。 – Barmar
あなたは 'push()'にメモリリークを持っています。 'new linkedList'を実行してそれをローカル変数に代入しますが、決して永久的に保存しないでください。 – Barmar
私は彼が従来のCの意味では二重のアスタリスクを使う必要があると思うし、これはC++なので参照(&)演算子を使う必要があると思う。 –