C et cordes

Code complet http://pastebin.com/6bdVTyPt Mon code d’arborescence fonctionnait parfaitement jusqu’à ce que je découvre que je devais valider l’id qu’il n’était pas du texte et qu’il devait donc s’agir d’une fonction d’insertion de chaîne. (atoi) et comparer sous forme de nombres entiers ne fonctionne pas, aide appréciée
merci heres la fonction d’insertion utilisant atoi au lieu de strcomp http://pastebin.com/yeuktyAF La fonction d’insertion ne fonctionne toujours pas

struct node * insert2(struct node *root, char x[],char id[]) { if(!root) { root=(struct node*)malloc(sizeof(struct node)); free( root->data ); free( root->id );// free previously allocated memory, if any root->data = strdup( x ); // malloc and copy root->id=strdup(id); root->left = NULL; root->right = NULL; // printf("1\n"); return(root); } printf("ssortingng comp %d of %s of %s\n",strcmp(root->id,id),root->id,id); if((strcmp(root->id,id))>0){ root->left = insert(root->left,x,id); printf("go left\n"); } else { if(strcmp(root->id,id)right = insert(root->right,x,id);} } return(root); } 

La ligne

 root=(struct node*)malloc(sizeof(struct node)); 

alloue de la mémoire pour root mais ne l’initialise pas. Cela signifie que les lignes suivantes

 free( root->data ); free( root->id ); 

essayez de libérer des pointeurs non initialisés (donc imprévisibles). Cela va presque certainement planter.

Comme vous venez juste d’allouer la root il ne peut pas y avoir de valeur précédente dans data ou id à libérer. Cela signifie que vous pouvez simplifier ces trois lignes pour

 root=malloc(sizeof(*root)); 

Vous ne pouvez pas comparer les chaînes numériques à l’aide de strcmp() . Vous devriez stocker vos ID: s sous forme d’entiers, si c’est ce qu’ils sont, afin de pouvoir les comparer directement.

Cela présente également l’avantage d’être moins complexe, puisque les entiers ont une taille fixe (en supposant que la unsigned long soit suffisamment longue), vous n’aurez pas besoin d’utiliser strdup() .

De même, ne convertissez pas la valeur de retour de malloc() en C.