2

カスタム ツリー構造を実装しようとしていますが、奇妙な出力が得られます。

enum letter{B,A,T,G,C,N};
struct Node {
    int ltr;
    Node* ptr;
};
class GTree
{

public:
    GTree(int);
    void insert(int);
private:
    Node* root;
    void insert(int l,Node* leaf);
};
GTree::GTree(int l)
{
    root->ltr=l;
}
void GTree::insert(int l, Node *leaf)
{
    cout<<leaf->ltr;
}
void GTree::insert(int l)
{
    if(root==NULL)
    {
        insert(l, root);
    }
    else
    {
        root= new Node;
        insert(l,root);
    }
}
int main()
{
    GTree tree=GTree(T);
    tree.insert(T);
}

2 を期待していたにもかかわらず、出力は -2062064467 となります。私は単純な BTree の実装を見ていましたが、それを目的のデータ構造に転用するつもりでした。

4

3 に答える 3

6

最初に GTree オブジェクトを作成したときに Node オブジェクトを作成しませんでした。

GTree::GTree(int l)
{
    root->ltr=l;
}

する必要があります

GTree::GTree(int l)
{
    root = new Node();
    root->ltr=l;
}

また、リソースをクリーンアップするためのデストラクターがあることを確認してください。


私が指摘しなければならないと私が感じるもう1つのことは、GTree::insert(int l, Node *leaf)おそらくあなたが期待することをしないということです。

cout<<leaf->ltr;

上記のコードは、ノードに整数値を出力するだけで、実際には割り当てません。

しかし、おそらくあなたはまだその部分を完了していません。:-)

于 2013-06-20T01:14:25.897 に答える
2

ルートを初期化していないためroot->ltr=l;、未定義の動作が発生します。root = new Node();最初に追加します。

于 2013-06-20T01:13:15.443 に答える
0

私はあなたのコードを実行し、gcc 4.6.3 を使用して Ubuntu 12.04 で出力 0 を得ました。

于 2013-06-20T01:20:49.647 に答える