erreur etrange dans l'implémentation des arbres binaires
Bonjour, j'implémente les arbres binaires en c sous eclipse avec MinGW, et je me retrouve confronté à une erreur étrange.
Je suis sûr qu'il n'y a pas d'erreur de programmation parce que dans le debug au pas a pas tout ce passe comme il faut pourtant en exécution normale le programme plante avec ce message ArbreBinaire.exe a cessé de fonctionner
voici le code :
ArbreBinaire.h
Code:
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 34 35 36 37 38 39 40 41 42 43 44
| #ifndef __AB__
#define __AB__
#include <stdio.h>
#include <stdlib.h>
typedef struct MNoeud
{
int val;
struct MNoeud *fg;
struct MNoeud *fd;
} Noeud;
/**
* @param val
* @param fg : fils gauche
* @param fd : fils droit
* @return Noeud*
*/
Noeud* construireNoeud(int val, Noeud *fg, Noeud *fd);
typedef struct MArbreBinaire
{
Noeud *racine;
int nbelt;
} ArbreBinaire;
/**
* @return AbreBinaire*
*/
ArbreBinaire* construireAB();
/**
* @param a
* @param val
*/
void inserer(ArbreBinaire **a, int val);
/**
* @return a
*/
void afficher(Noeud *a);
#endif |
ArbreBinaire.c
Code:
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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| #include "ArbreBinaire.h"
Noeud* construireNoeud(int val, Noeud *fg, Noeud *fd)
{
Noeud *n = (Noeud*)malloc(sizeof(Noeud*));
n->val = val;
n->fg = fg;
n->fd = fd;
return n;
}
ArbreBinaire* construireAB()
{
ArbreBinaire *ab = (ArbreBinaire*)malloc(sizeof(ArbreBinaire*));
ab->racine = NULL;
ab->nbelt = 0;
return ab;
}
void inserer(ArbreBinaire **a, int val)
{
Noeud *y = (*a)->racine;
Noeud *feuille = NULL;
Noeud *nn = construireNoeud(val, NULL, NULL);
while(y != NULL)
{
feuille = y;
if (val < y->val)
y = y->fg;
else
y = y->fd;
};
if (feuille == NULL)
(*a)->racine = nn;
else
{
if (nn->val < feuille->val)
feuille->fg = nn;
else
feuille->fd = nn;
}
(*a)->nbelt++;
}
void afficher(Noeud *a)
{
if (a != NULL)
{
afficher(a->fg);
printf("%d ", a->val);
afficher(a->fd);
}
} |
main.c
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #include <stdio.h>
#include <stdlib.h>
#include "ArbreBinaire.h"
int main()
{
ArbreBinaire *ab = construireAB();
inserer(&ab, 5);
inserer(&ab, 2);
inserer(&ab, 15);
afficher(ab->racine);
puts("");
return EXIT_SUCCESS;
} |