bon, on va dire que t'as dis C++ alors que tu voulais dire C
Code :
- struct brique {
- int c;
- struct brique* prec;
- };
- typedef struct brique brik;
|
=>
Code :
- typedef struct brique {
- int c;
- struct brique* prec;
- }brik;
|
Cela dit je déconseille d'utiliser le langage SMS dans un langage de programmation, enfin c'est toi qui vois.
Code :
- void empile(brik** P, int n)
- {
- brik nouvo;
- nouvo.prec = *P;//se place en haut de chaine
- nouvo.c = n;
- *P = &nouvo;//s'impose comme tête de chaîne
- printf("\nempilage...." );
- }
|
A partir de la, c'est la cata complete. Comme tu le sais, il y a des variables dites locales, et ces variables sont détruites lorsque l'on quitte la fonction les ayants crée. Hors, la que voyons nous ? Que tu conserve l'adresse d'une de ces variables locales (l'adresse de nouvo, pour etre plus précis). Ce qui n'est pas bon, du tout.
Bref, ce qu'il te faut faire, c'est allouer dynamiquement de la mémoire :
Code :
- void empile(brik** P, int n)
- {
- brik *nouvo = malloc(sizeof(brik));
- nouvo->prec = *P;//se place en haut de chaine
- nouvo->c = n;
- *P = nouvo;//s'impose comme tête de chaîne
- printf("\nempilage...." );
- }
|
La.
Par contre, si on malloc d'un coté, faudra penser a libérer de l'autre coté. Je corrige pas la suite car tout ces pointeurs voltigeant dans tous les sens me cassent la tete, et que j'ai pas trop envie de jouer au mikado ce soir. Essaye de deblayer un peu tout ca, que diable.