DÉTECTER LES FUITES DE MÉMOIRES (VC++6)

cs_GoldenEye Messages postés 527 Date d'inscription vendredi 14 septembre 2001 Statut Membre Dernière intervention 6 octobre 2008 - 21 nov. 2003 à 12:34
bobotetete Messages postés 1 Date d'inscription lundi 25 juillet 2005 Statut Membre Dernière intervention 31 octobre 2007 - 31 oct. 2007 à 16:22
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/18085-detecter-les-fuites-de-memoires-vc-6

bobotetete Messages postés 1 Date d'inscription lundi 25 juillet 2005 Statut Membre Dernière intervention 31 octobre 2007
31 oct. 2007 à 16:22
Vraiment pratique !!
cs_greg73 Messages postés 2 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 17 novembre 2006
17 nov. 2006 à 11:01
c'est parceque t'as pas fait la redefinition du new

#ifndef NDEBUG

#define new new(_NORMAL_BLOCK, __FILE__, __LINE__)

int flag = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);

flag |= _CRTDBG_LEAK_CHECK_DF;

_CrtSetDbgFlag(flag);

#endif


après c'est bon ca t'affiche bien le fichier et le numéro de ligne
bAzilew Messages postés 23 Date d'inscription jeudi 16 mars 2006 Statut Membre Dernière intervention 23 mars 2007
3 oct. 2006 à 12:46
C:Program FilesMicrosoft Visual StudioMyProjectsExempleexemple.cpp(15) : {46} normal block at 0x00431A90, 10 ->> cette ligne ne s'affiche pas (chez moi), ni numéro de ligne, ni nom de variable.
bAzilew Messages postés 23 Date d'inscription jeudi 16 mars 2006 Statut Membre Dernière intervention 23 mars 2007
3 oct. 2006 à 12:42
Bonjour :) N'y a t il pa une solution pour afficher qq part le nom de la variable concernée ?
cs_Xs Messages postés 368 Date d'inscription mercredi 14 novembre 2001 Statut Membre Dernière intervention 1 septembre 2008
21 nov. 2003 à 20:08
Idem !
Dans ce cas, ce que tu nous montre est génial !
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
21 nov. 2003 à 19:01
oui j'avoue que ca n'était pas forcément évident
cs_GoldenEye Messages postés 527 Date d'inscription vendredi 14 septembre 2001 Statut Membre Dernière intervention 6 octobre 2008 4
21 nov. 2003 à 18:45
voilà c ça que je voulais savoir !
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
21 nov. 2003 à 17:25
moi je dirais plutot
#define new new(_NORMAL_BLOCK, __FILE__, __LINE__)

pour l'exemple que j'ai donné il suffit de regarder les messages dans la fenetre debug (Avec Visual C++ bien entendu)

En l'occurence j'obtiens ca:

Detected memory leaks!
Dumping objects ->
C:Program FilesMicrosoft Visual StudioMyProjectsExempleexemple.cpp(15) : {46} normal block at 0x00431A90, 10 bytes long.
Data: < > CD CD CD CD CD CD CD CD CD CD
Object dump complete.
cs_Xs Messages postés 368 Date d'inscription mercredi 14 novembre 2001 Statut Membre Dernière intervention 1 septembre 2008
21 nov. 2003 à 16:28
Tu peux aussi redefinir new avec une macro :

#ifdef __DEBUG
#define new new(__FILE__,__LINE__)
#endif

ou un truc dans le genre.

Sur ta méthode en fait, je ne vois pas trop comment recuperer le nombre de fuite ni ou elles sont !
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
21 nov. 2003 à 14:02
bah en fait ya pas grand chose a expliquer:

int flag = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG); // sert a récupérer l'état courant

flag |_CRTDBG_LEAK_CHECK_DF; // signifie que tu veux pouvoir récupérer les fuites (leak fuite)

_CrtSetDbgFlag(flag); // tu fixes le nouveau flag

De toute facon ce n'est pas tres interessant de comprendre comment ca marche, je l'ai mis la parce que je trouve que c'est pratique de l'utiliser
cs_GoldenEye Messages postés 527 Date d'inscription vendredi 14 septembre 2001 Statut Membre Dernière intervention 6 octobre 2008 4
21 nov. 2003 à 12:34
tu nous expliques un peu comment ça fonctionne ?
merci
Rejoignez-nous