2013-02-24 118 views
0

我在頭文件下列陣列typedef結構的指針

typedef struct tree_node* TreeNode; 

struct tree_node{ 

    int value; 
    void *data; 

    TreeNode parent; 
    TreeNode left; 
    TreeNode right; 

}; 

要創建一個TreeNode我做以下

TreeNode createTreeNode(int value, void *data){ 

    TreeNode node; 

    node = malloc(sizeof(TreeNode*)); 

    if(node == NULL){ 
     printf("TreeNode malloc failed!!\n"); 
     exit(EXIT_FAILURE); 
    } 


    node->data = data; 
    node->value = value; 
    node->parent = NULL; 
    node->right = NULL; 
    node->left = NULL; 

    return node; 

} 

現在我想創建樹節點的數組...我怎麼會做它? 我想(取決於指針的大小或8)以下

TreeNode *treeNodes; 
treeNodes = malloc(26 * sizeof(TreeNode)); 

然後

treeNodes[a_number_between_0_to_25] = createTreeNode(intNodeValue, NULL); 
+1

替換的sizeof(樹節點*)爲sizeof(樹節點)因爲指針的大小不是結構本身 – giorashc 2013-02-24 15:55:23

+8

'typedef結構tree_node *樹節點的大小;'不是個好主意。它隱藏了'TreeNode'實際上是一個指針的事實。讓'TreeNode'成爲'struct tree_node'的別名,並使用'TreeNode *'代替。 – LihO 2013-02-24 15:55:29

+0

你真的想要一個TreeNode(換句話說,指針)或一個tree_node結構數組的數組嗎? – thejh 2013-02-24 15:57:43

回答

0

node = malloc(sizeof(TreeNode*));將僅分配4個字節。這是錯誤的。使用sizeof(struct tree_node);或者您將最終違反分段。

除此之外,你的代碼看起來沒問題。是的,這就是你如何創建一個數組。

查找到VLAS以及(可變長度數組)

+0

是的,我正在陷入無法預料的段錯誤。 – 2013-02-24 16:30:25

+0

@AmitPatil酷,我希望我發佈的解決方案解決了問題? – 2013-02-24 16:34:48

+0

我應該使用typedef struct *還是typedef struct? – 2013-02-24 16:57:12