txt por manejo linea lenguaje leer guardar ejercicios dev datos crear como archivos archivo c++ debugging memory-leaks crtdbg.h

c++ - por - _CRTDBG_MAP_ALLOC no muestra el nombre del archivo



leer archivo txt c++ linea por linea (2)

Estoy intentando detectar una pérdida de memoria y estoy usando la macro make _CRTDBG_MAP_ALLOC para ubicar el área de las fugas. Así que estoy definiendo MACRO como sigue:

#ifdef _DEBUG #define _CRTDBG_MAP_ALLOC #include <stdlib.h> #include <crtdbg.h> #define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__) #define new DEBUG_NEW #endif

En mi código, tengo:

UINT SomeFunThread( LPVOID pParam ) { _CrtMemState crtMemStateStart; _CrtMemState crtMemStateFinish; _CrtMemCheckpoint(&crtMemStateStart); // My suspisious code _CrtMemCheckpoint(&crtMemStateFinish); int nDifference(0); _CrtMemState crtMemStateDifference; nDifference = _CrtMemDifference(&crtMemStateDifference, &crtMemStateStart, &crtMemStateFinish); if(nDifference > 0) _CrtDumpMemoryLeaks(); return 0; }

(Gracias a Tushar Jadhav: el consumo de memoria aumenta rápidamente y luego disminuye muy lentamente; ¿pérdida de memoria? )

Pero la salida muestra algo como:

Detected memory leaks! Dumping objects -> {124058} normal block at 0x0000000031DED080, 24 bytes long. Data: < 0 ` $ > C8 30 F7 EF FE 07 00 00 60 D2 24 1D 00 00 00 00

en lugar de algo como esto:

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.

Entonces, ¿cómo puedo hacer que esto muestre el nombre del archivo y la ubicación de la fuga?


En mi caso, terminé incluyendo las cosas de this hilo en mi código. Esto anula al new operador e incluye el nombre del archivo y el número de línea en él para su posterior impresión. No estoy seguro si esto es aplicable a Visual Studio solamente.

#define _CRTDBG_MAP_ALLOC #include <crtdbg.h> #ifdef _DEBUG #define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__) #define new DEBUG_NEW #endif

El código de prueba completo de la fuente referenciada es:

#define _CRTDBG_MAP_ALLOC #include<iostream> #include <crtdbg.h> #ifdef _DEBUG #define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__) #define new DEBUG_NEW #endif int main() { char *a = new char[10]; _CrtDumpMemoryLeaks(); return 0; }

que en mi caso de prueba imprime:

Detected memory leaks! Dumping objects -> e:/test/testapplication/testapplication.cpp(11) : {144} normal block at 0x007F4EF0, 10 bytes long. Data: < > CD CD CD CD CD CD CD CD CD CD Object dump complete.


Parece que la línea de la fuga solo se muestra si el CRT está activado en ese archivo cpp.