IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Erreur de compilation sur une fonction effacer (listes chaînées)


Sujet :

C

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 63
    Points : 40
    Points
    40
    Par défaut Erreur de compilation sur une fonction effacer (listes chaînées)
    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 ?

  2. #2
    Membre du Club
    Inscrit en
    Novembre 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 63
    Points : 40
    Points
    40
    Par défaut
    ça marche avec la rectification :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    void efface(pile **p){
    pile * n= *p;
    *p=(*p)->prec;
    Mais je n'arrive à voir la différence entre l'un et l'autre des codes !

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Points : 641
    Points
    641
    Par défaut
    Je suppose que efface supprime le dernier élément de ta pile ?

    Et toi tu fait un free sur le nouveau sommet de la pile,
    le free doit etre fait sur l'ancien sommet de la pile.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void efface(pile **p){
    pile * n;
    n= *p;
    *p=n->prec;
    free(n);
     
    }

  4. #4
    Membre du Club
    Inscrit en
    Novembre 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 63
    Points : 40
    Points
    40
    Par défaut
    je vois, merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur de compilation sur une fonction utilisant les flux
    Par alves1993 dans le forum Débuter
    Réponses: 10
    Dernier message: 19/07/2013, 11h56
  2. Réponses: 7
    Dernier message: 12/11/2006, 12h49
  3. Erreur "type incompatible" sur une fonction
    Par Ricardo_Tubbs dans le forum ASP
    Réponses: 1
    Dernier message: 19/07/2006, 11h59
  4. Erreur de compilation sur une librairie en mode debug
    Par bakaneko dans le forum C++Builder
    Réponses: 2
    Dernier message: 18/05/2006, 16h32
  5. erreur PLS-00103 sur une fonction
    Par atruong dans le forum Oracle
    Réponses: 2
    Dernier message: 28/04/2006, 13h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo