0

左と右の子にポインターを割り当てようとすることに関係しているという事実以外に、プログラムが失敗する原因はわかりません。エラー メッセージは表示されず、プログラムの実行に失敗するだけです。ポインターの割り当てが間違っているためだと思います。

構造体は次のとおりです。

struct TreeNode
    {
            Type nodeinfo;
            BinaryTree<Type> *left;
            BinaryTree<Type> *right;
    };

クラスの名前は、テンプレートを使用した BinaryTree です。問題のある方法は次のとおりです。

template <typename Type>
void BinaryTree<Type>::setSubtree(Type a){
  root = new TreeNode;
  BinaryTree<Type> *b,*c;
  root->nodeinfo=a;

  b->root = s.top();
  root->right = b;
  s.pop();

  c->root = s.top();
  root->left = c;
  s.pop();
  s.push(root);
}

s は TreeNode* 型のスタックで、ノードを保持します。root は個々のノードです。

何度も変えたので、何から始めたか忘れてしまいました。これはテスト コードです (setInfo は問題なく動作します)。

tree.setInfo('b');
tree.setInfo('c');
tree.setSubtree('-');

ポインターを割り当てる方法についての洞察をいただければ幸いです。

4

1 に答える 1

0
BinaryTree<Type> *b,*c;
...
b->root = s.top();
...
c->root = s.top();

bポインターとを初期化することはありませんc

これらのエラーは自分で見つけたはずです。エラーに対する最初の防御としてこのサイトにアクセスすることは、非常に悪い考えです。デバッグの方法を学ぶことはありません。私たちの助けがなければ、どうしてこれらの問題を発見できたでしょうか? コンパイラ、valgrind などの分析ツール、デバッガ、またはコードを手動で実行します。

コンパイラの警告を有効にして、コンパイラを有利に使用する方法を学びます。GNU と clang は、コンパイルが最適化され、適切な警告が有効になっている場合に、このようなエラーをキャッチします。デバッガーの使用方法を学びます。コードを手動で実行する方法を学びます。

于 2012-09-24T22:35:01.617 に答える