[C]Arbres et seg fault

Arbres et seg fault [C] - C - Programmation

Marsh Posté le 17-03-2008 à 20:31:46    

Bonjour a tous,
 
Aujourd'hui les arbres.
 
J'ai juste crée deux fonctions permettant de créer et d'ajouter un élément a un arbre existant. Ça compile correctement puis seg fault.
 
Avez vous une idée du problème ?
 
 

Code :
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. typedef struct brother * brother1;
  5. struct brother
  6. {
  7. const char *nom;
  8. brother1 frere_droite;
  9. brother1 fils_aine;
  10. };
  11. brother1 b_create(const char *str)
  12. {
  13. brother1 arbre;
  14. arbre = malloc(sizeof(*arbre));
  15. if( arbre == NULL )
  16. {
  17.  fprintf(stderr,"Impossible d'allouer le noeud" );
  18.  return NULL;
  19. }
  20. strcpy((arbre->nom),str);
  21. arbre->frere_droite = NULL;
  22. arbre->fils_aine = NULL;
  23. printf("Noeud %s crée.\n",arbre->nom);
  24. return arbre;
  25. }
  26. void ajouter_frere(brother1 filsdej, const char *nom_fils)
  27. {
  28. if(filsdej->frere_droite==NULL){
  29.  printf("Ajout d'un frere à %s.\n",filsdej->nom);
  30.  filsdej->frere_droite=b_create(nom_fils);
  31. }
  32. else{
  33.  ajouter_frere(filsdej->frere_droite,nom_fils);
  34. }
  35. return;
  36. }
  37. void ajouter_fils(brother1 papa,const char *nom_fils)
  38. {
  39. if(papa->fils_aine==NULL)
  40.  papa->fils_aine=b_create(nom_fils);
  41. else{
  42.  ajouter_frere(papa->fils_aine,nom_fils);
  43. }
  44. return;
  45. }
  46. int main(int argc, char ** argv)
  47. {
  48. brother1 ji=b_create("Nouvel arbre" );
  49.     return 0;
  50.    }


 
Merci talentueux programmeurs ! :)

Reply

Marsh Posté le 17-03-2008 à 20:31:46   

Reply

Marsh Posté le 17-03-2008 à 20:35:57    

Bon, deja faut indenter sinon les "talentueux programmeurs" ils arrivent pas a lire :

Code :
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. typedef struct brother * brother1;
  5. struct brother
  6. {
  7.    const char *nom;
  8.    brother1 frere_droite;
  9.    brother1 fils_aine;
  10. };
  11. brother1 b_create(const char *str)
  12. {
  13.    brother1 arbre;
  14.    arbre = malloc(sizeof(*arbre));
  15.    if( arbre == NULL )
  16.    {
  17.       fprintf(stderr,"Impossible d'allouer le noeud" );
  18.       return NULL;
  19.    }
  20.    strcpy((arbre->nom),str);
  21.    arbre->frere_droite = NULL;
  22.    arbre->fils_aine = NULL;
  23.    printf("Noeud %s crée.\n",arbre->nom);
  24.    return arbre;
  25. }
  26. void ajouter_frere(brother1 filsdej, const char *nom_fils)
  27. {
  28.    if(filsdej->frere_droite==NULL){
  29.       printf("Ajout d'un frere à %s.\n",filsdej->nom);
  30.       filsdej->frere_droite=b_create(nom_fils);
  31.    }
  32.    else{
  33.       ajouter_frere(filsdej->frere_droite,nom_fils);
  34.    }
  35.    return;
  36. }
  37. void ajouter_fils(brother1 papa,const char *nom_fils)
  38. {
  39.    if(papa->fils_aine==NULL)
  40.       papa->fils_aine=b_create(nom_fils);
  41.    else{
  42.       ajouter_frere(papa->fils_aine,nom_fils);
  43.    }
  44.    return;
  45. }
  46. int main(int argc, char ** argv)
  47. {
  48.    brother1 ji=b_create("Nouvel arbre" );
  49.    return 0;
  50. }


 
 

Reply

Marsh Posté le 17-03-2008 à 20:37:32    

Ensuite, quand est-ce que tu alloues l'espace pour stocker la chaine "nom" ? Tu fais un strcpy dessus, mais ca pointe vers n'importe quoi! (edit: a la ligne 25, le strcpy)


Message édité par Ace17 le 17-03-2008 à 20:37:51
Reply

Marsh Posté le 17-03-2008 à 20:47:49    

Oui désolé dans mon ide c'est indenté j'ai pas vérifié.
 
Oh la en effet, c'était ça le problème ... j'ai honte :s
 
Merci a toi

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed