C++/C でポインターがどのように機能するかを誤解していると思います。これらは、メモリ アドレスを表す単なる整数値です。このnew
キーワードは、クラスにメモリを割り当ててから、そのクラスのコンストラクターを呼び出します。
だからあなたが書いたことから
TreeNode *c = new TreeNode;
Treenode にポインターを割り当てます。次に、Treenode にメモリを割り当て、そのコンストラクタを呼び出して、このメモリ ブロックのアドレスをポインタに割り当てます。
c = stack.top(); //this segfaults
関数呼び出し stack.top() によって返されたアドレス/ポインター値を取得し、それを変数 c に割り当てます。
クリスが言ったように、コードが機能していたとしても、c ++にはガベージコレクターがないため、リークです。そのため、 c= stack.top() を実行すると、以前に割り当てられたメモリがヒープで失われます。
また
Treenode *c = new Treenode;
delete c;
c = stack.top();
または
Treenode *c = stack.top();
あなたの観察可能な問題は、stack.top() への呼び出しのどこかにあります。このようなポインターチュートリアルをお勧めします。
http://www.codeproject.com/Articles/627/A-Beginner-s-Guide-to-Pointers