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
ArbreBinaire.c
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
main.c
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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); } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
Partager