2013-02-24 4 views
0

я следующий в моем файле заголовокмассива ЬурейеЙ структуры указателей

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; 

} 

Теперь я хочу создать массив TreeNodes ... как бы я сделай это? я думал следующее

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

И затем

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

Заменить SizeOf (TreeNode *) для SizeOf (TreeNode), так как размер указателя не размер самой структуры – giorashc

+8

'ЬурейеЙ структуры tree_node * TreeNode;' это не хорошая идея. Это скрывает тот факт, что 'TreeNode' на самом деле является указателем. Пусть 'TreeNode' является псевдонимом для' struct tree_node' и вместо этого использует 'TreeNode *'. – LihO

+0

Вы действительно хотите массив TreeNodes (другими словами, указатели) или массив структур tree_node? – thejh

ответ

0

node = malloc(sizeof(TreeNode*)); будет выделять только 4 байта (или 8 в зависимости от размера указателя). Это не верно. Используйте sizeof(struct tree_node); или у вас закончится нарушение сегментации.

Кроме этого, ваш код выглядит нормально. и да, именно так вы можете создать массив.

Посмотрите на VLAS, а также (переменная длиной Массивы)

+0

Да, я получал segfault непредсказуемо. –

+0

@AmitPatil классный, я надеюсь, что решение, которое я разместил, решает проблему? –

+0

Должен ли я использовать typedef struct * или typedef struct? –

Смежные вопросы