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

Visual C++ Discussion :

[Debogueur]Fuites mémoires détectées ?


Sujet :

Visual C++

  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut [Debogueur]Fuites mémoires détectées ?
    Bonjour,

    Je suis un peu novice en C++, et je me pose souvent des questions quant aux fuites mémoires / destructeur / delete.

    J'aurais voulu savoir si le debogueur de VS2008 Express détectait les fuites mémoires que nos programmes pouvaient créer ?

    Question bonus : Avez vous un lien vers une bonne documentation/explication sur la création/suppression des objets en C++ ?

    Merci beaucoup,

    G.

  2. #2
    Membre éprouvé
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Points : 1 067
    Points
    1 067
    Par défaut
    Pour Visual 2008, je ne peux pas te répondre. Il existe une macro DEBUG_NEW permettant de tracer l'endroit où sont allouées les fuites mémoires apparaissant lors du dump des objets, mais je crois qu'elle n'est disponible qu'avec les MFC, et donc pas Visual 2008 Express.

    Pour la création/suppression des objets, il faut juste savoir que tu as deux façons d'instancier un objet en C++:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MyObject l_myObject;     // instanciation statique
    // ou
    MyObject* l_pmyObject = new MyObject();     // instanciation dynamique
    Dans le premier cas, l'objet va être créé en local et existera jusqu'à ce que l'on sorte de ce niveau local. Et si je ne dis pas de bêtises, la mémoire est déjà disponible avant même l'instanciation de l'objet car le compilateur a prévu cette zone mémoire (instanciation statique)
    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
    //  l_myObject n'existe pas
     
    if(bFlag)
    {
         MyObject l_myObject;  // Instanciation de l'objet
         // ....
         // l_myObject existe encore mais va être détruit 
         // dès que l'on va sortir du if
    }
    else
    {
         // l_myObject n'existe pas
    }
     
    // l_myObject n'existe pas
    Dans le deuxième cas, le new va rechercher de la place en mémoire pour y placer le nouvel objet. Celui-ci existera d'ailleurs tant que la mémoire ne sera pas libérée. Il n'y a donc plus de notion de "local": l_pmyObject reste une variable pointeur qui sera détruite à la fin de la zone locale, mais la zone mémoire existera toujours. Une fois que cette variable est détruite, plus aucun lien n'existe avec la zone mémoire qui reste allouée pour rien et surtout avec aucun moyen de la libérer. C'est ce qu'on appelle les fuites mémoires.
    Ce type d'instanciation (dynamique) doit donc être utilisé avec précaution.

    Concernant la documentation, je te laisse jeter un oeil à la FAQ C++, notamment aux paragraphes 5.1, 5.2 et 9.

    Bon courage

    NB: je ne pense pas avoir dit de bêtises, mais on ne sait jamais, tu peux également parcourir toi-même les cours et tutoriels disponibles sur ce site ou d'autres.

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut
    Merci beaucoup pour ta réponse.

    Ton explication est claire et précise, et me conforte dans ma paranoïa des fuites mémoires .

    Encore merci pour ta réponse claire et complète.

    G.

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

Discussions similaires

  1. [tomcat][memoire] java.net.URL et fuite mémoire
    Par Seiya dans le forum Tomcat et TomEE
    Réponses: 6
    Dernier message: 09/03/2009, 11h41
  2. [Fuites mémoire] Je cherche un utilitaire
    Par 10_GOTO_10 dans le forum C++Builder
    Réponses: 8
    Dernier message: 10/02/2005, 11h03
  3. Outil de recherche de fuite mémoire
    Par eag35 dans le forum MFC
    Réponses: 4
    Dernier message: 02/02/2005, 13h46
  4. [SWT]SWT et fuite mémoire(ou pas)
    Par menuge dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 22/06/2004, 22h40
  5. [debug] fuites mémoires
    Par tmonjalo dans le forum C
    Réponses: 3
    Dernier message: 28/07/2003, 18h20

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