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

MFC Discussion :

[MFC] Comment corriger ces fuites de mémoire


Sujet :

MFC

  1. #1
    Membre confirmé Avatar de Philippe320
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 179
    Par défaut [MFC] Comment corriger ces fuites de mémoire
    Bonjour,

    j'ai des fuites de mémoire à la fin de mon application :
    grace à DebugView, et à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //Debug
    _CrtSetDbgFlag(_CRTDBG_LEAK_CHECK_DF | _CRTDBG_ALLOC_MEM_DF);
    _CrtSetReportMode(_CRT_WARN,_CRTDBG_MODE_DEBUG);
    _CrtSetReportFile(_CRT_WARN,_CRTDBG_FILE_STDOUT);
    j'obtiens la sortie suivante :

    00000000 0.00000000 PGL_D.DLL Initializing!
    00000006 7.40244198 PGL_D.DLL Terminating!
    00000007 7.40939045 Detected memory leaks!
    00000008 7.40958595 Dumping objects ->
    00000009 7.40964699 C:\Documents and Settings\Philippe\Mes documents\Electronique\Projets\Gavroche\Soft\Gavroche\GavrocheVue.cpp(37) :
    00000010 7.42083073 {92}
    00000011 7.42101765 normal block at 0x00682940, 32 bytes long.
    00000012 7.44560766 Data: < > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
    00000013 7.44961500 plex.cpp(31) :
    00000014 7.45022726 {82}
    00000015 7.45436382 normal block at 0x00682EB0, 124 bytes long.
    00000016 7.45452356 Data: < P h > 00 00 00 00 00 00 00 00 00 00 00 00 50 10 68 00
    00000017 7.45457697 {81}
    00000018 7.46356106 client block at 0x00682F60, subtype 0, 32 bytes long.
    00000019 7.46379328 a CDocManager object at $00682F60, 32 bytes long
    00000020 7.46384716 strcore.cpp(118) :
    00000021 7.46389961 {80}
    00000022 7.46396255 normal block at 0x00682FB0, 65 bytes long.
    00000023 7.46401787 Data: < 4 4 Gavr> 01 00 00 00 34 00 00 00 34 00 00 00 47 61 76 72
    00000024 7.46604490 C:\Documents and Settings\Philippe\Mes documents\Electronique\Projets\Gavroche\Soft\Gavroche\Gavroche.cpp(89) :
    00000025 7.46623850 {79}
    00000026 7.46630526 client block at 0x00681050, subtype 0, 108 bytes long.
    00000027 7.46635914 a CSingleDocTemplate object at $00681050, 108 bytes long
    00000028 7.46644831 strcore.cpp(118) :
    00000029 7.46650028 {77}
    00000030 7.46667099 normal block at 0x006810F0, 19 bytes long.
    00000031 7.46672535 Data: < File> 01 00 00 00 06 00 00 00 06 00 00 00 46 69 6C 65
    00000032 7.46677351 strcore.cpp(118) :
    00000033 7.46682405 {76}
    00000034 7.46688414 normal block at 0x00681130, 29 bytes long.
    00000035 7.46693134 Data: < Rece> 01 00 00 00 10 00 00 00 10 00 00 00 52 65 63 65
    00000036 7.46701813 {75}
    00000037 7.46708202 normal block at 0x00681180, 16 bytes long.
    00000038 7.46713018 Data: < L_ L_ L_> 03 00 00 00 14 CB 4C 5F 14 CB 4C 5F 14 CB 4C 5F
    00000039 7.46718121 {74}
    00000040 7.46755362 normal block at 0x006811C0, 32 bytes long.
    00000041 7.46763754 Data: << K_ h < h > 3C 8D 4B 5F 03 00 00 00 84 11 68 00 3C 11 68 00
    00000042 7.47216463 Object dump complete.
    J'suis un peu perdu là-dedans, alors j'ai quelques questions...

    1. Est-ce avec ces informations que je vais pouvoir corriger ces fuites ?
    2. Si je fais la somme des "xx bytes long", ça ne fait finalement pas une grosse fuite .... cela vaut-il donc la peine de corriger pour si peu ?
    3. A part GavrocheVue.cpp et Gavroche.cpp qui m'appartienne, les autres .cpp font partie de VC6, donc comment les corriger ?

    Merci par avance de m'aiguiller un peu là dedans
    Bon dimanche
    Philippe

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    La mémoire en CDCDCDCDCD est de la mémoire non-initialisée: Comme si tu avais fait une allocation dans le vide (sans utiliser le pointeur retourné).
    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.

  3. #3
    Membre confirmé Avatar de Philippe320
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 179
    Par défaut
    En fait, je l'ai utilisé, mais pas "délété" à la fin
    avec le delete qui va bien, plus de fuite là

    par contre, la fuite en ligne 89 de Gavroche.cpp
    est dûe à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    	// Register the application's document templates.  Document templates
    	//  serve as the connection between documents, frame windows and views.
    	CSingleDocTemplate* pDocTemplate;
    	pDocTemplate = new CSingleDocTemplate(
    		IDR_MAINFRAME,
    		RUNTIME_CLASS(CGavrocheDoc),
    		RUNTIME_CLASS(CMainFrame),       // main SDI frame window
    		RUNTIME_CLASS(CGavrocheVue));
    or ça, c'est issu de ClassWizard. C'est vrai que pDocTemplate n'est libéré nul part, mais c'est du code généré automatiquement, c'est un peu gros comme erreur...
    Faut-il ajouter un delete pDocTemplate quelque part systématiquement ?

    Merci de ta réponse
    Philippe

  4. #4
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 152
    Par défaut
    Bonjour Philippe,

    j'ai cherché à utiliser votre code pour chercher les fuites de mémoire et j'ai donc placé les _CrtSetxxx dans le destructeur de mon application:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //Debug
    _CrtSetDbgFlag(_CRTDBG_LEAK_CHECK_DF | _CRTDBG_ALLOC_MEM_DF);
    _CrtSetReportMode(_CRT_WARN,_CRTDBG_MODE_DEBUG);
    _CrtSetReportFile(_CRT_WARN,_CRTDBG_FILE_STDOUT);
    cependant rien ne s'affiche dans mon DebugView, pourriez vous m'indiquer où placer ce code pour qu'il fonctionne correctement ou comment l'utiliser pour qu'il m'affiche ces rapports de fuites de mémoire ?

  5. #5
    Membre confirmé Avatar de Philippe320
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 179
    Par défaut
    Bonjour,

    j'ai placé ce code dans l'InitInstance de mon application
    (classe CWinApp) (donc au tout début de l'exécution pour que les fuites ultérieures soient détectées).
    Dans le menu Capture de DebugView, j'ai coché Capture Win32,Kernel et Events.

    Vous devriez avoir le même genre d'infos (ou mieux, pas de fuite du tout )

    Philippe

  6. #6
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 152
    Par défaut
    Bonsoir,

    j'ai utilisé ce code dans le constructeur de mon application (qui est un activeX) mais rien ne s'affiche dans DebugView, auriez-vous une idée sur pourquoi celà ne me donne rien?

  7. #7
    Membre confirmé Avatar de Philippe320
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 179
    Par défaut
    vous compilez bien en debug ?

  8. #8
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 152
    Par défaut
    oui

  9. #9
    Membre confirmé Avatar de Philippe320
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 179
    Par défaut
    Dans le help, je lis :
    When _DEBUG is not defined, calls to _CrtSetDbgFlag are removed during preprocessing.
    Avez-vous bien ceci au début de l'application :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
    Si oui, franchement je sèche
    Désolé
    Philippe

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/09/2010, 18h26
  2. comment détecter les fuites mémoires
    Par cyrille37 dans le forum C++/CLI
    Réponses: 2
    Dernier message: 26/04/2008, 15h12
  3. [débutant] comment éviter les fuites de mémoire ?
    Par dahtah dans le forum Général Java
    Réponses: 6
    Dernier message: 13/03/2007, 17h40
  4. Comment corriger ces erreurs ?
    Par apt dans le forum Langage
    Réponses: 9
    Dernier message: 18/01/2007, 17h49
  5. Réponses: 1
    Dernier message: 02/12/2005, 14h18

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