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 pointeur


Sujet :

C

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 5
    Points : 7
    Points
    7
    Par défaut Erreur de pointeur
    Bonjour à tous.

    Alors voilà mon probleme, je suis étudiante en L1 et je revise un TP. Je dois créer plusieurs fonctions dont deux qui contiennent la fameuse asterisque.
    Seulement je bloque à cause d'une erreur qui revient sans cesse. Je ne comprends pas.
    Voilà la partie de code qui contient l'erreur.

    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
     
     
    /*EMPILER PILE */
     
    void empilerPile(pile *p, int e);
    {
     if (estPleinePile(*p) != 1)
     { 
       ((*p).nbElems) = ((*p).nbElems) + 1 ;
        (*p).tab[(*p).nbElems - 1]= e ;
     }
     else 
     { 
       printf("erreur : pile pleine") ;
       exit(1) ;
     }
     
    }
     
    /*DEPILER PILE */
     
    void depilerPile(pile *p);
    {
     if (estVidePile(*p))
     { printf("erreur : pile vide");
       exit (1); 
     }
     
     else 
     { (*p).nbElems= (*p).nbElems - 1 ; }
    }

    PS : la fonction estVidePile verifie que ma pile est vide ou non. Elle retourne 1 si elle l'est et 0 sinon
    et voilà les erreurs affichées :

    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
     
     
    tp7.c:74:20: erreur: invalid type argument of unary ‘*’ (have ‘pile’)
      if (estPleinePile(*p) != 1)
                        ^
    tp7.c:76:6: erreur: invalid type argument of unary ‘*’ (have ‘pile’)
        ((*p).nbElems) = ((*p).nbElems) + 1 ;
          ^
    tp7.c:76:23: erreur: invalid type argument of unary ‘*’ (have ‘pile’)
        ((*p).nbElems) = ((*p).nbElems) + 1 ;
                           ^
    tp7.c:77:6: erreur: invalid type argument of unary ‘*’ (have ‘pile’)
         (*p).tab[(*p).nbElems - 1]= e ;
          ^
    tp7.c:77:15: erreur: invalid type argument of unary ‘*’ (have ‘pile’)
         (*p).tab[(*p).nbElems - 1]= e ;
                   ^
    tp7.c:77:33: erreur: ‘e’ undeclared (first use in this function)
         (*p).tab[(*p).nbElems - 1]= e ;
                                     ^
    tp7.c:77:33: note: each undeclared identifier is reported only once for each function it appears in
    tp7.c:91:18: erreur: invalid type argument of unary ‘*’ (have ‘pile’)
      if (estVidePile(*p))
                      ^
    tp7.c:97:5: erreur: invalid type argument of unary ‘*’ (have ‘pile’)
      { (*p).nbElems= (*p).nbElems - 1 ; }
         ^
    tp7.c:97:19: erreur: invalid type argument of unary ‘*’ (have ‘pile’)
      { (*p).nbElems= (*p).nbElems - 1 ; }
    Si quelqu'un pouvait m'aider, et m'expliquer en même temps ce que j'ai raté. Merci

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 370
    Points : 23 625
    Points
    23 625
    Par défaut
    Bonjour et bienvenue,

    Première chose : à la ligne 5, tu as oublié un point-virgule en trop :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    void empilerPile(pile *p, int e);

    Ensuite, une expression du style « tp7.c:74:20 » signifie que l'erreur a été rencontrée dans le fichier « tp7.c », à la ligne 74, et la colonne 20. C'est déjà une indication précieuse pour localiser le problème. Partant de ce constat, ta ligne 74 correspond ici à la ligne 7. Tu disposes de deux fonctions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void empilerPile(pile *p, int e);
    et estPleinePile(), dont le prototype est probablement (puisqu'on ne le voit pas ici) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int estPleinePile(Pile *p);
    Ça veut dire que ces deux fonctions attendent exactement le même paramètre : un pointeur vers une pile. Si tu appelles la seconde depuis la première, il faut donc lui transmettre l'argument tel que tu l'as reçu exactement, donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      if (estPleinePile(p) != 1)
    soit « p », sans l'astérisque. Si tu le mets, tu déréférences le pointeur et tu ne transmets plus le contenu du pointeur lui-même, mais celui de ce qu'il pointe, donc le premier élément de la pile, qui n'a pas du tout le même type et ne référence pas la même chose.

    Pour le reste, sache qu'une expression du type « (*p).elem » peut se raccourcir en « p->elem ». Les autres erreurs indiquent que l'opération n'est pas applicable à « p » qui devrait pourtant avoir le bon type. Elles sont probablement provoquées en cascade par le fait que tu as oublié d'enlever le point-virgule initial. Cela dit, un bloc anonyme au niveau global ne devrait pas compiler non plus. Il y a probablement d'autres erreurs en amont dans ton fichier (par exemple une accolade refermante oubliée).

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 5
    Points : 7
    Points
    7
    Par défaut
    Et bien merci beaucoup! Résolu de suite du coup. Effectivement il manquait bien une accolade fermant et j'avais un autre point virgule en trop.
    Toujours des petites erreurs d'inattentions.

    merci de m'avoir répondu si rapidement

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

Discussions similaires

  1. erreurs sur pointeurs ?
    Par darkwall_37 dans le forum Débuter
    Réponses: 14
    Dernier message: 05/11/2009, 21h11
  2. Réponses: 10
    Dernier message: 03/04/2009, 13h09
  3. pb erreur de pointeur aidez moi please
    Par campgourou dans le forum Java ME
    Réponses: 20
    Dernier message: 16/03/2006, 16h36
  4. Réponses: 24
    Dernier message: 23/02/2006, 11h04
  5. erreur C2664 : pointeur sur fonction
    Par hiko-seijuro dans le forum C++
    Réponses: 2
    Dernier message: 26/07/2005, 14h50

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