Detectar fugas de memoria en Visual Studio
Publicado en C/C++, Windows el 10 de March, 2010 por Fran.Para los que programen en C con Visual Studio y sientan añoranza de valgrind, aquí están los pasos sobre cómo detectar fugas de memoria (memory leaks) en Visual Studio:
- Añadir la macro
_CRTDBG_MAP_ALLOCdel preprocesador, ya sea definiéndola en algún archivo del proyecto o en las opciones de compilación del proyecto. - Incluir en el siguiente orden
stdlib.hycrtdbg.hen los archivos dónde se busquen las fugas de memoria. El archivocrtdgb.hsustituye las funcionesmallocyfreepor unas propias que registran la memoria reservada y liberada. - Añadir la función
_CrtDumpMemoryLeaks ()al final del programa en el que se buscan las fugas de memoria. Esta función muestra por la salida de depuración las fugas de memoria detectadas.
Todo esto sólo funcionará cuando el proyecto se compile con la macro _DEBUG definida, es decir, en lo que debería ser para todos la versión de depuración del programa.
La macro _CRTDBG_MAP_ALLOC sirve para que la función _CrtDumpMemoryLeaks () muestre información sobre el archivo y la línea en la que se produjo la fuga de memoria.
Un pequeño ejemplo de cómo quedaría todo:
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
int
main (int argc, char *argv[])
{
/* Código del programa */
_CrtDumpMemoryLeaks ();
return 0;
}
Si este programa tuviera alguna fuga de memoria, al compilarlo en modo depuración y ejecutar el depurador de Visual Studio, se obtendría en la salida de éste un listado con las fugas de memoria del programa.
Para más información, leed el artículo Enabling Memory Leak Detection de la MSDN.