j'utilise cette structure pour mon arbre:Segmentation nœuds d'arbre de copie de défaut dans un tableau
typedef struct product{
char name[50];
char id[5];
double price;
int amount;
struct product *left_p, *right_p;
}product_t;
Alors, je dois convertir l'arbre dans un tableau. J'ai écrit cela pour la dimension de l'arbre:
int tree_dim(product_t *node_p){
int i = 1 ;
if (node_p == NULL)
i = 0;
else{
i += tree_dim(node_p->left_p);
i += tree_dim(node_p->right_p);
}
return i;
}
Mon arbre est peuplé en lisant les enregistrements d'un fichier txt. Les enregistrements sont 21 et la valeur retournée par tree_dim est correcte. La valeur est stockée dans arr_dim
.
Puis-je créer un product_t *products_a;
Wich sera le « tableau » et affecter en mémoire à l'aide products_a = malloc (arr_dim*sizeof (product_t));
Maintenant, c'est la fonction de remplir le tableau avec les nœuds d'arbres:
void fill_array(int *index, product_t *node_p, product_t *products_a){
if (node_p != NULL){
fill_array(index, node_p->left_p, products_a);
products_a[*index++] = *node_p;
fill_array(index, node_p->right_p, products_a);
}
}
Mais ça me donne une erreur de segmentation donc j'ai aussi essayé cette 2ème solution:
int fill_array(product_t *node_p, product_t *products_a){
int i = 1 ;
if (node_p == NULL){
i=0;
}
else
{
i += fill_array(node_p->left_p, products_a);
products_a[i-1] = *node_p;
i += fill_array(node_p->right_p, products_a);
}
return i;
}
Ce qui ne donne pas de défaut de segmentation mais quand je pr Dans le tableau, il y a des positions vides. J'ai besoin de conseils pour savoir où je me trompe. Peut-être un problème avec l'index et les appels récursifs mais je ne peux pas le comprendre.
L'utilisation d'un débogueur semble être la meilleure façon de understant votre problème. Un test sur overfoll pour 'products_a' est manquant. –
Je pense que '* index ++' ne fait pas ce que vous attendez. – unwind