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 :

probleme sur la libération de mémoire (code simple)


Sujet :

C++

  1. #1
    Membre très actif
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 274
    Par défaut probleme sur la libération de mémoire (code simple)
    Bonjour,

    voici mon code, ca sera plus simple d'expliquer mon probleme par la suite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int* getDix()
    {
    	int c = 10
    	int *a = &c;
    	return a ;
    }
     
    int main(int argc, char const *argv[])
    {
    	int *var = getDix();
    	cout << "valeur de var : " << (*var) << endl;
    }
    la valeur de *var = 10, mais normalement apres la fonction getDix(), toutes les variables utilisées dans ma fonction sont libérées de la pile. Donc mon pointeur peut toujours accéder à la case mémoire mais il y a de forte chance qu'une autre valeur va etre écrit à cet emplacement mémoire, c'est donc tres dangereux de faire ca, on est bien d'accord?

    Merci d'avance pour vos réponses

  2. #2
    Membre éclairé
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Juin 2008
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 522
    Par défaut
    getDix() crée une variable c, puis l'initialise à 10. Ensuite elle crée un pointeur a vers la valeur de c. Elle renvoi a. Mais effectivement elle détruit c, car c n'a plus de raison d'exister. Donc a pointe vers une case mémoire qui ne contient rien de bien défini. Donc effectivement ce code n'est pas sûr, je suis d'accord avec toi.

  3. #3
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Si tu supprimes ta variable intermédiaire et que ta fonction devient comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int* getDix()
    {
        int c = 10;
        return &c;
    }
    alors ton compilateur devrait émettre un warning comme celui (avec MinGW) :
    ..\src\main.cpp: In function 'int* getDix()':
    ..\src\main.cpp:7:9: warning: address of local variable 'c' returned [-Wreturn-local-addr]
         int c = 10;
             ^
    Ce qui confirme que ce n'est pas une bonne idée

  4. #4
    Membre très actif
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 274
    Par défaut
    ok merci c'est bien ce qu'il me semblait

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

Discussions similaires

  1. Question sur la libération de mémoire
    Par adaneels dans le forum C#
    Réponses: 16
    Dernier message: 17/06/2009, 18h47
  2. Réponses: 1
    Dernier message: 12/05/2009, 15h31
  3. probleme de code simple
    Par BFH dans le forum C
    Réponses: 18
    Dernier message: 28/10/2005, 18h57
  4. Question simple sur la libération des objets
    Par gibet_b dans le forum Langage
    Réponses: 2
    Dernier message: 12/07/2004, 10h01
  5. Réponses: 25
    Dernier message: 16/07/2003, 20h41

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