2016-07-14 7 views
2

私は、次の構造体があります。このツリーでセグメンテーションフォールトとポインタがNULLでない

typedef struct treeNode *tree; 
typedef struct treeNode { 
    int key; 
    tree left, right; 
} treeNode; 

my tree

問題: mytree->左>左を - >左はNULLではありません。しかし、なぜ?!どのように私は支店の終わりに達したかどうかを確認できますか?

tree mytree = (tree)malloc(sizeof(treeNode)); 
    mytree->key = 17; 
    mytree->left = (tree)malloc(sizeof(treeNode)); 
    mytree->left->key = 5; 
    mytree->left->left = (tree)malloc(sizeof(treeNode)); 
    mytree->left->right = (tree)malloc(sizeof(treeNode)); 
    mytree->left->left->key = 20; 
    mytree->left->right->key = 2; 
    mytree->right = (tree)malloc(sizeof(treeNode)); 
    mytree->right->key = 1; 
    mytree->right->left = (tree)malloc(sizeof(treeNode)); 
    mytree->right->right = (tree)malloc(sizeof(treeNode)); 
    mytree->right->left->key = 6; 
    mytree->right->right->key = 3; 
+2

「NULL」に設定しましたか?いいえ?だから、なぜそれがあろうか? –

+0

すべてのノードを初期化するときに、左右の子をNULLに設定しましたか? – Haris

+2

ツリーの作成に使用したコードは表示されませんが、私たちがあなたを助けることはできません。あなたが使ったコードを投稿してもらえますか? – templatetypedef

答えて

5

treeNodeを割り当てるとき、ポインタをNULLに初期化しますか? Cは動的に割り当てられたメモリを魔法のように初期化しません。

初期化コードを追加しました。 malloc()は、メモリの内容をゼロに初期化しません。コードにleftrightポインタをNULLに設定するものは何もありません。だから彼らはNULLではありません。手動で初期化するか、malloc()の代わりにcalloc()を使用してください。 calloc()は、割り当てられたメモリをゼロに初期化します。

+0

初期化コードを質問に追加しました – phip1611

関連する問題