Question

J'essaie d'utiliser la détection de fuite de mémoire CRT, mais le message suivant s'affiche dans Microsoft Visual Studio: "Fuites de mémoire détectées - saut du vidage d'objet". Je ne pourrai jamais le faire faire et le vidage d’objets.

J'ai suivi les instructions données dans l'article de Microsoft sur la détection de fuite de mémoire ( http://msdn.microsoft.com/en-us/library/e5ewb1h3 (VS.80) .aspx ) sans succès.

Dans mon fichier stdafx.h, j'ai (reconstruit l'ensemble du projet):

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>

Au point d'entrée de ma candidature, j'ai:

_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );

J'espère également que le nom de fichier et le numéro de ligne seront affichés dans le format annoncé par Microsoft:

Detected memory leaks!
Dumping objects ->
C:\PROGRAM FILES\VISUAL STUDIO\MyProjects\leaktest\leaktest.cpp(20) : {18} 
normal block at 0x00780E80, 64 bytes long.
 Data: <                > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete.

Bien que je n'ai JAMAIS pu obtenir un vidage d'objets, mais j'ai remarqué que d'autres personnes affirment voir quelque chose dans ce sens (même avec _CRTDBG_MAP_ALLOC défini):

Detected memory leaks!
Dumping objects ->
{18} normal block at 0x00780E80, 64 bytes long.
 Data: <                > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete.

Je ne veux pas vraiment perdre de temps à remplacer les nouveaux opérateurs et les opérateurs de suppression. J'espérais donc que le débogage CRT m'aiderait. Si cela ne fonctionne pas, il se peut que je finisse par remplacer les opérateurs new et delete, mais je souhaite réellement obtenir les informations d'allocation avec un nom de fichier et un numéro de ligne (croise les doigts).

Merci, Kiril

Était-ce utile?

La solution

Je ne l'ai pas ici sur ma machine, mais lorsque vous installez MSVC, vous avez la possibilité d'installer (la plupart du) code source pour la bibliothèque d'exécution C (c'est-à-dire pour MSVCRTxx.xxx). Si vous recherchez dans le code source " ignorer le vidage d’objets " alors vous pourrez peut-être comprendre pourquoi le vidage d’objet est ignoré.

Autres conseils

Je viens d'utiliser le détecteur de fuite visuel après avoir reçu une grande quantité d'objets contenant une fuite, sans nom de fichier / numéro de ligne, l'approche _CrtDumpMemoryLeaks. VLD a fonctionné comme annoncé (c'est gratuit) et je suis assez content de cela.

Le nom et la ligne du fichier de raison sont imprimés parce que l'attribution a été effectuée à l'aide d'une macro new qui transmet __ FILE __ et __ LINE __. si vous ne voulez pas toucher nouveau , vous ne passerez pas __ FICHIER __ et __ LIGNE __ au tube cathodique et il ne pourra pas imprimer cette. Il n'y a pas de grande magie impliquée ici, vraiment.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top