2013-02-24 5 views
0

J'ai suivant dans mon fichier d'en-têtetableau de pointeurs struct typedef

typedef struct tree_node* TreeNode; 

struct tree_node{ 

    int value; 
    void *data; 

    TreeNode parent; 
    TreeNode left; 
    TreeNode right; 

}; 

Pour créer un treenode que je fais suit

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; 

} 

Maintenant, je veux créer une matrice de TreeNodes ... comment pourrais-je fais le? Je pensais suivant

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

Et puis

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

Remplacer sizeof (TreeNode *) sizeof (TreeNode) puisque la taille d'un pointeur n'est pas la taille de la structure elle-même – giorashc

+8

'typedef struct tree_node * TreeNode;' ce n'est pas une bonne idée. Il cache le fait que 'TreeNode' est en fait un pointeur. Soit 'TreeNode' un alias pour' struct tree_node' et utilise 'TreeNode *' à la place. – LihO

+0

Voulez-vous vraiment un tableau de TreeNodes (en d'autres termes, des pointeurs) ou un tableau de structs tree_node? – thejh

Répondre

0

node = malloc(sizeof(TreeNode*)); n'allouera 4 octets (ou 8 en fonction de la taille d'un pointeur). C'est faux. Utilisez sizeof(struct tree_node); ou vous allez vous retrouver avec une violation de segmentation.

À part ça, votre code a l'air correct. et oui, c'est ainsi que vous pouvez créer un tableau.

Regardez dans VLA et (Arrays de longueur variable)

+0

oui je devenais segfault imprévisible. –

+0

@AmitPatil cool, j'espère que la solution que j'ai posté résout le problème? –

+0

Dois-je utiliser typedef struct * ou typedef struct? –