Bonsoir,
Mon objectif est de créer un arbre a n fils, n n'étant pas connu au moment de la compilation et lors de l’exécution du programme. Tout se fait donc par allocation dynamique.
J'ai donc une structure node :
Et 2 fonctions permettant d'initialiser une node :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 typedef struct node_struct node; struct node_struct{ int nb; // Le nombre que je veux stocker dans ma node node** tabFils; // Le tableau de fils int nbFils; // Le nombre de fils };
Déjà, juste à partir de l'appel de creer_node(), le débogueur me crie dessus comme quoi je n'ai pas le droit de toucher à mon tabFils[0].
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 node* creerNULL_node(){ node* sortie = (node*) malloc (sizeof(node*)); sortie->nbFils = 0; return sortie; } node* creer_node(int nb){ node* sortie = (node*) malloc (sizeof(node*)); sortie->nb = nb; sortie->nbFils = 0; sortie->tabFils[0] = creerNULL_node(); return sortie; }
Ma question est : pourquoi cela ?
J'ai tâtonné ( ou plutôt, j'ai fais n'importe quoi en espérant que ça marche ) et maintenant, je désespère. Car ça ne marche pas dès la création d'une node.
Surtout qu'après j'ai ma fonction qui ajoute un fils qui, comme j'ai suivi le même raisonnement, devrait joyeusement planter :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 void pushFils_node(node* current,int nb){ if( current == NULL ){ printf("pushFils_node : current = NULL\n"); return; } node* newNode = creer_node(nb); if( current->nbFils == 0 ){ printf("\n\nA\n"); current->tabFils[0] = newNode; current->nbFils += 1; } else { printf("\n\nB\n"); node* buffer = creerNULL_node(); buffer = (node*) realloc (current->tabFils, (current->nbFils+1) * sizeof(node)); if (buffer != NULL){ affiche_node(current); current->tabFils[0] = buffer; affiche_node(current); current->tabFils[current->nbFils] = newNode; current->nbFils += 1; affiche_node(current); } else { free (current->tabFils); puts ("Error (re)allocating memory"); exit (1); } } }
Je vous remercie d'avance pour votre aide qui me permettra de sauvegarder ma santé mentale![]()
Partager