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 :

Pointeur, pointeurs sur pointeurs


Sujet :

C

  1. #1
    Membre régulier Avatar de m@tix
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 304
    Points : 76
    Points
    76
    Par défaut Pointeur, pointeurs sur pointeurs
    Bonjour,

    Considérant le code suivant:
    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    struct cellule {
        int nb;
        struct cellule *p;
    };
     
    int main(void)
    {
        struct cellule **p1;
        struct cellule *p2;
        int i;
     
        p1=malloc(sizeof(struct cellule*));
        for (i=0;i<5;i++){
            *p1=malloc(sizeof(struct cellule));
            if (i==0) {
                p2=*p1;
            }
            (*p1)->nb=i;
            (*p1)->p=NULL;
            p1=&((*p1)->p);
        }
        return (0);
    }
    A quoi sert *p2?
    Pourquoi utiliser un pointeur sur pointeur?

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    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 368
    Points : 23 622
    Points
    23 622
    Par défaut
    C'est effectivement très tordu. D'autant que la valeur initiale de p1 est perdue, ce qui va provoquer des fuites de mémoire. Ça aurait peut-être un sens si c'était pour se conformer à un modèle existant, mais ça n'empêcherait pas la fuite, de toutes façons.

  3. #3
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    A quoi sert *p2?
    Dans le code tel que présenté, p2 ne sert à rien puisqu'une fois initialisé, il n'est jamais utilisé. Je suppose qu'à terme il sera utilisé comme étant la tête de la liste.

    Pour éviter la fuite mémoire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        struct cellule *p;
        struct cellule **p1=&p;
        struct cellule *p2;
        int i;
        for (i=0;i<5;i++){.....
    Il manque les tests sur le résultat des malloc()
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Si l'on n'oubliait pas p2à la fin, il servirait à quelque chose: Il sert à mémoriser le premier pointeur, celui sur la tête de la liste.

    Par contre, plutôt que les assigner dans ce sens, il est plus simple de faire pointer directement p1 sur p2!
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Besoin d'aide sur pointeur
    Par SebRs dans le forum C++
    Réponses: 2
    Dernier message: 18/05/2006, 10h21
  2. Iterateur sur pointeur de vector
    Par Pragmateek dans le forum SL & STL
    Réponses: 9
    Dernier message: 13/05/2006, 13h50
  3. Cacher le pointeur souris (sur tout le systeme)
    Par Platypus dans le forum MFC
    Réponses: 4
    Dernier message: 20/02/2006, 17h40
  4. pointeur sur pointeur
    Par gaut dans le forum C
    Réponses: 3
    Dernier message: 01/11/2005, 21h30
  5. pointeur multiple sur un objet
    Par Arnaud-h dans le forum C++Builder
    Réponses: 9
    Dernier message: 02/06/2004, 11h33

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