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 :

Dereference un pointeur retourne par une fonction


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de elvivo
    Inscrit en
    Mai 2002
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 105
    Par défaut Dereference un pointeur retourne par une fonction
    Bonjour,

    Je me pose une question au sujet de la liberation de la memoire lors du dereferencement d'un pointeur retourne par une fonction.

    J'ai la fonction suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    int* testFct()
    {
        int* a = new int;
       *a = 42;
       return a;
    }
    Le main est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int main()
    {
        int b = 0;
     
        b = *testFct();
     
        return 0;
    }
    Mon probleme est: A quel moment je fais le delete?
    Il me semble que la memoire a ete allouee mais dans la mesure ou je derefence le pointeur lors de l'appel de la fonction, je "perds" le pointeur.
    J'espere aue j'ai ete clair
    D'avance merci!

  2. #2
    Membre expérimenté

    Inscrit en
    Mai 2005
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 132
    Par défaut
    Salut,

    bien sur, tu as ete clair, voire meme pour etrangers :-))

    Dans ton example ce n'est pas possible. Tu dois le faire comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int main()
    {
        int *b = NULL;
     
        b = testFct();
     
        return 0;
    }
    En somme ... tu dois te souvenir le pointeur. La valeur est toujour accessible, mais en plus tu peux faire delete.

    La recommandation - il faut TOUJOUR transmettre le pointeur :-))))))

    Fredy "KRUGER"

  3. #3
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Ou ne pas renvoyer de pointeur brut, c'est bien aussi surtout sur des types primitifs.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  4. #4
    Membre confirmé Avatar de elvivo
    Inscrit en
    Mai 2002
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 105
    Par défaut
    @Davidbrcz: Oui c'etait juste un exemple. Dans la pratique je retournerai pas un pointeur sur un simple int sauf si j'ai une bonne raison

    Merci a tous les deux!!
    J'ai ma reponse.
    A force d'utiliser des langages avec un garbage collector j'ai oublie les bons reflexes

  5. #5
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Bah tu peux renvoyer des pointeurs intelligents (boost::shared_ptr ou équivalent) mais pas de pointeurs bruts.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    Oui le bon réflexe serait de ne pas utiliser de pointeurs bruts.:

    Règle 1) Ne pas utiliser des pointeurs
    Règle 2) Utiliser des références
    Règle 3) Si vraiment besoin de pointeurs, ne pas utiliser de pointeurs bruts

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

Discussions similaires

  1. Chaîne retournée par une fonction et encodage
    Par dj-julio dans le forum Langage
    Réponses: 4
    Dernier message: 26/03/2008, 22h36
  2. Réponses: 2
    Dernier message: 24/12/2007, 09h53
  3. Réponses: 4
    Dernier message: 07/04/2007, 20h02
  4. valeur retournée par une fonction
    Par Biosox dans le forum C
    Réponses: 13
    Dernier message: 19/01/2007, 23h17
  5. Réponses: 11
    Dernier message: 31/10/2005, 17h59

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