2016-07-14 15 views
2

我有以下結構:段故障,並指向不存在的結構是不爲空

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

與此樹:

my tree

問題: mytree->左>左 - > left不是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。您可以手動初始化它們(最適合您),也可以使用calloc()而不是malloc()calloc()將分配的內存初始化爲零。

+0

我將我的初始化代碼添加到問題中 – phip1611