Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Détection de fuite mémoire avec Visual Studio [ Windows / System ] (RV2931)

vendredi 9 novembre 2007 à 16:43:06 | Détection de fuite mémoire avec Visual Studio

RV2931

Bonjour,

J'ai vu sur ce post Fuites-Mémoires que l'on pouvait utiliser le débugger de VC pour détecter les fuites mémoires.
Il suffit d'insérer en début du fichier :
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>

et d'appeler la fonction _CrtDumpMemoryLeaks();  à la sortie du programme.

Par cette méthode, j'obtient quelque chose du genre :
Detected memory leaks!
Dumping objects ->
......
c:\program files\microsoft visual studio .net 2003\vc7\include\crtdbg.h(689) : {60} normal block at 0x09714B20, 32 bytes long.
 Data: <H:\C++\dessin.sv> 48 3A 5C 43 2B 2B 5C 64 65 73 73 69 6E 2E 73 76
c:\program files\microsoft visual studio .net 2003\vc7\include\crtdbg.h(689) : {59} normal block at 0x09714AD0, 16 bytes long.
 Data: <         Kq     > CD CD CD CD CD CD CD CD 80 4B 71 09 00 00 00 00
c:\program files\microsoft visual studio .net 2003\vc7\include\crtdbg.h(689) : {58} normal block at 0x09712FC0, 32 bytes long.
 Data: <H:\C++\dessin.sv> 48 3A 5C 43 2B 2B 5C 64 65 73 73 69 6E 2E 73 76
c:\program files\microsoft visual studio .net 2003\vc7\include\crtdbg.h(689) : {57} normal block at 0x09712F48, 60 bytes long.
 Data: <                > CD CD CD CD 00 CD CD CD CD CD CD CD CD CD CD CD


D'après la MSDN (http://msdn2.microsoft.com/en-us/library/e5ewb1h3(VS.80).aspx) concernant cette méthode débugage,
le numéro contenu dans les accolades {60} représente le numéro de l'allocation mémoire "The memory allocation number (inside the curly braces).", je ne vois pas trop ce que cela représente
le 689 est censé représenté la ligne mais il se situe dans le fichier crtdbg.h qui semble être effectivement un appel à la fonction "new" mais je ne sais pas où cette appel se fait dans mon fichier.

Comment je peux savoir à quel endroit dans mes fichier cette appel à eu lieu ou ce qui a causé cet appel.

J'utilise pas mal de STL::string, normalement, il n'y pas besoin de les libérer ces choses là???

Si quelqu'un a l'habitude de débugger avec cet outils, peut-il m'aider et m'indiquer la méthode de recherche ?? sinon, une autre méthode, sachant que je travaille en win32 avec des classes et fonctions récursives...ce qui fait que j'ai un sacré paquet de memoryleaks

Merci

RV

L'intelligence est la chose la mieux répartie chez l'homme, car quoi qu'il en soit pourvu, il a toujours l'impression d'en avoir assez. "Descartes"


vendredi 9 novembre 2007 à 21:03:58 | Re : Détection de fuite mémoire avec Visual Studio

gbourgeois0019

Réponse acceptée !
Je ne crois pas qu'il y ait vraiment de moyen de déterminer de quelle ligne provient le leak. Par contre moi ce que j'utilise comme strategie, je n'execute qu'une partie de mon code en mettant le reste en commentaire et je vois si cette partie provoque des leaks, et je recommence pour une autre partie et ainsi de suite...

Bien sur cette startegie ne convient pas toujours tout dependant de l'application mais parfois ca va quand meme bien !

________________________________________________________________________
Hardware is what we play with until it breaks, Software is what we play with until it works !

samedi 10 novembre 2007 à 02:29:10 | Re : Détection de fuite mémoire avec Visual Studio

RV2931

Oui, le truc c'est que j'utilise plusieurs fonctions récursives et je ne fais pas d'allocation explicite de mémoire ou bien qu'en je fais des new, je passe la référence en paramètre de retour, donc peut-être que ça vient de là, je sais pas, j'ai donc bcp de mal à voir d'où cela provient. Je fais un parseur et j'utilise bcp de STL::string temporaires, mais celles-là sont normalement détruites à chaque fin de fonction, donc j'ai du mal, en plus, j'ose pas filer mon code, il est pas propre, j'ai pas vraiment fait de test de retour pour le moment, mais ça marche quand même, sinon la récursivité planterai, mais bon, je vais essayer de trouver et/ou de rendre mon code propre et on verra ça

Merci

@+

L'intelligence est la chose la mieux répartie chez l'homme, car quoi qu'il en soit pourvu, il a toujours l'impression d'en avoir assez. "Descartes"

samedi 10 novembre 2007 à 14:55:56 | Re : Détection de fuite mémoire avec Visual Studio

mezaya

Réponse acceptée !
si tu veut détecter les leaks mémoire et si tu utilise visual avec l'aoocateur par défaut rien de plus simple. En debug tu ajout dans ton code la ligne suivante : _CrtSetDbgFlag( _CRTDBG_LEAK_CHECK_DF ); CrtSetDbgFlag permet de checker le tas, la stack etc... va voir sur msdn pour plus d'info. cela va de donner le même résultat que CrtDumpMemoryLeaks(). le nombre entre parenthèse est bien le numéro d'allocation. si ce numéro est identique sur plusieur lancement tu peut breaker au numéro d'allocation spécifier avec la fonction _CrtSetBreakAlloc( numeroAllocation ); tu n'as plus qu'a remonter la stack pour savoir qu'elle bout de code leak. Voili,Voilou

samedi 10 novembre 2007 à 15:12:44 | Re : Détection de fuite mémoire avec Visual Studio

RV2931

C'est bon,

j'ai trouvé, je faisais des liste chaînées de partout, mais j'avais oublié de gérer les destructeurs tout simplement...
entre autres...

J'ai fait ça en faisant insérant des appels à _CrtDumpMemoryLeaks(); accompagné d'un breakpoint,
D'abord j'éxucute le programme complet en débug et je sauvegarde le résultat, c'est à dire les memory leaks réels, définitifs dans un wordpad.
Après, en mettant des appels à _CrtDumpMemoryLeaks();+ breakpoint on obtient ainsi une liste des zone mémoires allouées temporairement et définitiement,
et en comparant la liste des numéros d'allocation du résultat avec celle que j'ai obtenu à la fin du programme, j'ai repéré les endroits où il y avait des allocations non libérées

voilà la méthode que j'ai utilisée, au moins, ce sera expliqué comment faire, peut-être pas très clairement, mais j'aurai essayé..

RV


L'intelligence est la chose la mieux répartie chez l'homme, car quoi qu'il en soit pourvu, il a toujours l'impression d'en avoir assez. "Descartes"




Cette discussion est classé dans : visual, cd, include, studio, crtdbg


Répondre à ce message

Sujets en rapport avec ce message

OpenGL et Glut [ par chacapouette ] Bonjour, voilà je suis débutant dans la programmation et j'ai quelques petits soucis pour utiliser Glut (glut utilisé avec OpenGl pour pas mal de chos Pb. COMPILATION API C de MYSQL et Visual studio 8 [ par zorro4472 ] Bonjour,J'essai de compiler un source C avec Visual Studio 8 mais... Le compilateur n'aime pas mon code .... J'ai mis include MYSQL/mysql.h et winsock extraire miniatures vista - visual C++ - classe abstraite - appel d'une fonction membre non static [ par michelscofield ] /*Bonjour à tous,J'ai quelques problèmes sur ce petit programme console pour vista, nottament au niveau de Programmation objet...Programme en console lib vs 2008 [ par unionx ] bonjour sous visual studio 6 je peux creer ma .lib facilement grace au projet : File->New->Win32 Static Library maintenant j'ai changer mon compila Debug avec Visual Studio 2005 [ par Chrigou ] Bonjour,Je suis quand même étonné que personne n'a de réponse concernant ce problème...http://www.cppfrance.com/infomsg_EXCEPTION-HRESULT-0X80131417_8 Obtenir la couleur des pixels avec Visual Studio [ par niniefifie ] Bonjour,J'ai quelques connaissances en C++ et j'ai appris a programmer sur Dev C++. Je dois a present apprendre a connaitre le logiciel Visual Studio, utilisation de Visual C++ Express 2008 [ par ethan94 ] Bonjour :)En cours, je commence à apprendre le C++. Le logiciel de développement installé sur les PC est Visual C++ 6.0, qui d'après le fichier "A pro problème entre compilateurs [ par GrandGarfield ] Bonjour, j'ai développé une application C++ qui fait intervenir des lectures et écritures dans des fichiers textes. J'ai en fait commencé le développ DirectX et Visual Studio 6 [ par sebcmoa ] Bonjour,Est-ce-que quelqu'un sait quelle est la dernière version de DirectX (DirectSound plus précisément) compatible avec Visual Studio 6 C++ (sans b Diretshow & visual Studio 2005 [ par krasyscom ] Bonjour,j'ai un projet dont je veux creer un lecteur de video (.H264), j'ai commencer a tracer la graphe des filtres avec Graphedit et ça marche il m'


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Appels d'offres



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,296 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.