Salut tous, Et la série continue !

Cette fois, je crois que c'est plutôt relatif à l'algorithmique, quoique j'y vois pas d'erreurs...Bon voilà le code :
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
60
61
62
 
#include <stdio.h>
#include <stdlib.h>
 
   typedef struct pile
        {
                int valeur;
                struct pile *prec;
        } pile ;
 
 pile *MaPile = NULL;
 
void Push(pile **p, int Val)
{
        pile *element = malloc(sizeof(pile));
        if(!element) exit(EXIT_FAILURE);     /* Si l'allocation a échouée. */
        element->valeur = Val;
        element->prec = *p;
        *p = element;       /* Le pointeur pointe sur le dernier élément. */
}
 
pile * add(pile ** p,int val) {
pile * n=malloc(sizeof(pile));
n->prec= *p;
*p=n;
n->valeur= val;
 return *p;}
 
void parcours(pile **p){
do
{
 /*int val= (*p)->valeur;
printf("%d",val);*/
printf("%d\n",(*p)->valeur);
*p=(*p)->prec;}while(*p);}
 
void efface(pile **p){
pile * n;
n= *p;
*p=n->prec;
free(*p);
 
}
int main()
{
    /*Push(&MaPile, 10);
    printf("%d\n",MaPile->valeur);
    printf("%d",MaPile->prec);*/
 
    add(&MaPile, 5);
    add(&MaPile, 8);
    //printf("%p",add(&MaPile,5));
    //printf("%d",MaPile->valeur);
    //parcours(&MaPile);
    efface(&MaPile);
    printf("\n");
    parcours(&MaPile);
 
 
 
    return 0;
}
Je suis sûr que c'est la commande dans le main qui est génératrice du problème, il suffit de la mettre en commentaire pour voir que le reste marche à merveille. So what's wrong with it ?