Bonjours tous,

Alors ça fait deux jours que je sèche sur quelques points, je me suis dit qu'il est temps de demander de l'aide.

D'abord le code des fonctions :

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
63
64
65
66
67
68
 
//-------------------------------------------
///définir la structure
//-------------------------------------------
   typedef struct pile
        {
                int valeur;
                struct pile *prec;
        } pile ;
 
//-------------------------------------------
/// intitialiser la pile à NULL
//-------------------------------------------
 pile *MaPile = NULL;
 
 
 //------------------------------------------
///fonction d'ajout dans la liste chaînée
//-------------------------------------------
pile * add(pile ** p,int val) {
        pile * n=malloc(sizeof(pile));
        n->prec= *p;
        *p=n;
        n->valeur= val;
        return *p;}
 
//--------------------------------------------
///fonction de parcours dans une liste chaînée
//--------------------------------------------
 
void parcours(pile **p){
        do
        {
            int val= (*p)->valeur;
            printf("%d\n",val);
            *p=(*p)->prec;
            }while(*p);
}
 
//----------------------------------------------
///fonction de suppression dans une listee chaînée
//----------------------------------------------
void efface(pile **p){
        pile * n= *p;
        *p=(*p)->prec;
 
        //free(*p);
 
}
//----------------------------------------------
///fonction de recherche dans une liste chaînée
//----------------------------------------------
 
void search(pile **p, int val){
        int b=0;
        while(*p != NULL)
        {
            if((*p)->valeur==val)
                  {
                        b=1;
                  }
        *p=(*p)->prec;
 
        }
        if(b==1) printf(" it's 1");
        if(b==0) printf("it's 0");
 
}
alors pour vérifier le bon fonctionnement de ces fonctions, j'ai fait plusieurs versions du "main":

1/
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
 
int main()
{
 
    add(&MaPile, 1);
    add(&MaPile, 2);
    add(&MaPile, 3);
    //efface(&MaPile);
    printf("-----------\n");
    parcours(&MaPile);
    printf("-----------\n");
 
 
    return 0;
}
Qui marche à merveille, l'ajout se fait, le parcours aussi, l'affichage le prouve.

2/
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
 
int main()
{
 
    add(&MaPile, 1);
    add(&MaPile, 2);
    add(&MaPile, 3);
    efface(&MaPile);
    printf("-----------\n");
    parcours(&MaPile);
    printf("-----------\n");
 
 
 
    return 0;
}
Un élément saute, la fonction effacer marche alors ! Super !

3/

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
int main()
{
 
    add(&MaPile, 1);
    add(&MaPile, 2);
    add(&MaPile, 3);
    //efface(&MaPile);
    printf("-----------\n");
    parcours(&MaPile);
    printf("-----------\n");
    search(&MaPile,1);
 
 
    return 0;
}
Search ne marche pas, elle retourne 0, si d'ailleurs j'aurais initialiser b=5, elle aurait retourné 5, le teste ne se fait donc pas, ce que je ne comprends pas...

4/
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
 
int main()
{
 
    add(&MaPile, 1);
    add(&MaPile, 2);
    add(&MaPile, 3);
    printf("-----------\n");
    parcours(&MaPile);
    printf("-----------\n");
    efface(&MaPile);
    printf("\n-----------\n");
    parcours(&MaPile);
 
 
 
    return 0;
}
Là je compte parcourir la liste (le programme affichera alors 3,2,1), effacer un élément (qui sera 3) et reparcourir (ce qui devrait afficher 2.1), mais à ma grande surprise l'exe coïnce et me renvoie un message erreur : "pile.exe a cessé de fonctionner" !!

Je précise que j'utilise Code::blocks, version 10.05.

En attendant vos suggestions et réponses, merci de lire !