Initialisation d'un arbre

Initialisation d'un arbre - C - Programmation

Marsh Posté le 02-01-2006 à 16:49:23    

Bonjour
 
Donc mon problème est que lorsque je'initialise un arbre avec une liste j'ai un probleme pour la premiere valeur de la liste qui est A;
A la place de cette valeur il me met un "x" je ne voi d'ou me vient l'erreur.
J'aimerais savoir si ca provient de la liste ou du code le probleme.
 
Voila mon code de l'initialisation de l'arbre
 

Code :
  1. #include "arbre.h"
  2. void creerArbre(Arbre* a)
  3. {
  4.    *a = (Arbre)malloc(sizeof(Noeud));
  5.    (*a)->lettre = ' ';
  6.    (*a)->fgauche = NULL;
  7.    (*a)->fdroit = NULL;
  8. }
  9. void InitArbre(Arbre a, Liste l)
  10. {
  11.      int i = 0;
  12.      l = l->suiv;
  13.      while(l)
  14.      {
  15.          Arbre b = a;
  16.          char* m = l->morse;
  17.          for(i = 0; *(m+i) != '\0'; i++)
  18.          {   
  19.              Arbre e;
  20.            
  21.              if (*(m+i)=='.') e = b->fgauche;
  22.              else e = b->fdroit;
  23.                
  24.              //Arbre e = (*(m+i) == '.')? b->Gauche: b->Droit;     
  25.              if(e == NULL)
  26.              {
  27.                  e = (Arbre)malloc(sizeof(Noeud));
  28.                  e->fgauche = NULL;
  29.                  e->fdroit = NULL;
  30.                  if(*(m+i) == '.')
  31.                      b->fgauche = e;
  32.                  else
  33.                      b->fdroit = e;
  34.              }
  35.              b = e;
  36.          }
  37.          b->lettre = l->c;
  38.          l = l->suiv;
  39.      }
  40. }
  41. void Afficher_arbre(Arbre a)
  42. {
  43.      if (a!=NULL)
  44.      {
  45.           Afficher_arbre(a->fdroit);
  46.           //Afficher_arbre(a->fgauche);
  47.           printf("%c \n",a->lettre);
  48.           Afficher_arbre(a->fgauche);
  49.           //Afficher_arbre(a->fdroit);
  50.      }
  51. }
  52. char ConvertirMorse(char* m, Arbre a)
  53. {
  54.      int i = 0;
  55.    
  56.      for (i = 0; *(m+i) != '\0'; i++)
  57.      {
  58.          if(*(m+i) == '.')
  59.              a = a->fgauche;     
  60.          else
  61.              a = a->fdroit;       
  62.      }
  63.      return a->lettre;   
  64. }


Reply

Marsh Posté le 02-01-2006 à 16:49:23   

Reply

Marsh Posté le 02-01-2006 à 17:51:38    

t'as pas un segmentation fault dès l'initialisation de ton arbre ?
Car je vois que dans ta boucle while tu déclare un nouvelle arbre sans réservé de la mémoire (et en plus pas du tout à la bonne place), et pareil dans ta boucle for

Reply

Marsh Posté le 02-01-2006 à 17:56:07    

Tout fonctionne je nai aucune erreur.
J'ai trouvé le probleme c'est que j'avais incrémenté ma liste des lke depart c'est pour cela que je n'ai pas la bonne valeur pour le A
 
Merci pour ton aide

Reply

Sujets relatifs:

Leave a Replay

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