2010-01-28 1 views
10

Sto tentando di utilizzare _CrtDumpMemoryLeaks() per visualizzare perdite di memoria nei miei programmi.Come utilizzare _CrtDumpMemoryLeaks()

Ma non visualizza nulla tranne che per la restituzione di 0 in caso di assenza di perdite di memoria e 1 in caso di perdita.

Il link qui mostra l'uscita dovrebbe essere come:

Detected memory leaks! 
Dumping objects -> 
D:\VisualC++\CodeGuru\MemoryLeak\MemoryLeak.cpp(67) : {60} 
normal block at 0x00324818, 4 bytes long. 
Data: <, > 2C 00 00 00 
Object dump complete. 

Qualcuno può suggerire il modo corretto di utilizzare questa funzione.

+0

Ho lo stesso problema. Hai trovato la causa del problema? – Horcrux7

+0

http://msdn.microsoft.com/en-us/library/fxszt639%28VS.80%29.aspx Nel mio caso non stavo impostando le modalità di rapporto. Prova il programma di esempio fornito nel link e sarai in grado di vedere l'output – pankajt

risposta

17

Scarica il campione dal seguente link. Devi impostare i seguenti parametri per indirizzare l'output alla console.

// Send all reports to STDOUT 
    _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE); 
    _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDOUT); 
    _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE); 
    _CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDOUT); 
    _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE); 
    _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDOUT); 
3

Dopo aver cercato il motivo per cui non funziona nel mio codice ho trovato i punti successivi:

  • Se non v'è alcuna perdita rilevata allora questo metodo di stampa nulla.
  • Non tutti i metodi di allocazione sono interessati. Ad esempio CoTaskMemAlloc non sono interessati.
  • L'avviso deve essere abilitato con _CrtSetReportMode e _CrtSetReportFile.
+0

grazie per aver condiviso le informazioni – pankajt