comment savoir d'ou vient les fuites memoires
Version imprimable
comment savoir d'ou vient les fuites memoires
Tu utilises MFC ?
oui
salut,
si tu as les macros suivante en debut de source:
la fuite memoire sera signalée en debug dans l'onglet debug.Code:
1
2
3
4
5
6 #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif
avec en prime la ligne de la fuite accessible par double clic.
:D
Excellent !
Ca marche sur toutes les versions de Visual ?
je deja ces lignes mais je peux pas double cliquer sur toutes
ça fonctionne depuis visual 4.x jusqu'a visual .net 200x
.
:D
si tu as les lignes et que tu n'as pas l'info complete c'est que la fuite est dans un source qui n'a pas ces macros.
:D
J'imagine qu'il faut faire gaffe aussi à ce que l'effacement des données allouées avec ces new soit fait dans un source avec ces macros ?
je ne pense pas, le define ne redefinit que le new.Citation:
Envoyé par Miles
:D
On verra bien comment il s'en sort alors, mais c'est étonnant, la plupart des bibliothèques qui font ça doivent réécrire et new et delete.
vive le garbage collector :aie:
Vive les pointeurs intelligents :D
Vive les bons programmeurs :ange:
[FLOOD on]
VIVE MOI !
[FLOOD off]
mais comment il fait pour repérer les fuites ?
Au passage: Si tu as par malheur des malloc() dans ton programme (ce que tu ne devrais pas avoir puisque c'est un programme C++), rajoute cette définition dans les options du préprocesseur:
Cela te permettra d'avoir nom de fichier et numéro de ligne pour les malloc comme pour les new.Code:_CRTDBG_MAP_ALLOC
je n'est pas de malloc dans mon programme
parcontre j'ai une map dans une de mes classe que je remplis dans le constructeur comme ceci
faut il que je les efface dans mon destructeur ? si oui comment car la je sais pas car l'utilisation des map m'étais jusque la inconnu mais ma été imposé donc j'ai pris ce que j'ai pu sur le net.Code:s_maMap["OK"] = pOK;
Non, ta map est détruite à la destructution de l'objet.
Par contre, si la map contient des pointeurs, les objets pointés ne sont pas détruits, me semble-t-il...
C'est pour cela que les conteneurs de la STL travaillent généralement par valeur...
Au fait, au sujet du debug de MFC: le define ne redéfinit que le new, mais c'est pour ajouter des paramètres (c'est un nouvel operator new qui est appelé)
L'operator delete est réécrit aussi, mais il garde la même signature que le delete original, donc pas besoin de define.
dans mon exemple pOK se trouve dans un enum