es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Problema al intentar encontrar pérdidas de memoria utilizando crtdbg.h

Estoy intentando usar por primera vez la biblioteca CRT para detectar fugas de memoria. He definido #define _CRTDBG_MAP_ALLOC al principio del programa. Mi programa está compuesto por clases, una estructura y una función principal. En la función principal tengo _CrtDumpMemoryLeaks(); al final. Traté de seguir estas instrucciones.

Y quería obtener las líneas donde se asignan los datos que causan las fugas de memoria, pero obtengo una salida como esta:

¡Se han detectado fugas de memoria!
Volcando objetos ->
{326} bloque normal en 0x00E02C40, 8 bytes de longitud.
Datos: <<# > 3C 23 E0 00 00 00 00 00
{322} bloque normal en 0x00E02CB0, 8 bytes de longitud.
Datos: <L > 4C 1F E0 00 00 00 00 00
{318} bloque normal en 0x00E02AF0, 8 bytes de longitud.
Datos: < " > CC 22 E0 00 00 00 00 00
{312} bloque normal en 0x00E02A10, 8 bytes de longitud.
Datos: < $ > FC 24 E0 00 00 00 00 00
...

No salgo en ninguna parte de mi programa y siempre termina en la función principal. ¿Cuál puede ser la causa de que no obtenga el número de asignación? Puedo añadir mi código si es necesario.
Gracias por cualquier ayuda.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el usuario está experimentando dificultades para obtener números de asignación al utilizar la biblioteca CRT para detectar fugas de memoria en su programa en C++. Han seguido las instrucciones proporcionadas en la documentación de Microsoft y han definido #define _CRTDBG_MAP_ALLOC al comienzo de su programa. Sin embargo, al ejecutar su programa y utilizar _CrtDumpMemoryLeaks(); al final de su función principal, solo obtienen como resultado los bloques de memoria que quedaron sin liberar, pero no los números de asignación.

    El usuario menciona que su programa está compuesto por clases, una estructura y una función principal. También afirman que no salen del programa y que siempre termina en la función principal. El usuario está buscando ayuda para identificar la causa de este problema.

    Sin ver el código del usuario, es difícil identificar la causa exacta del problema. Sin embargo, una posibilidad podría ser que el usuario no esté utilizando el archivo de cabecera #include <crtdbg.h> en su programa. Este archivo de cabecera proporciona las macros y funciones necesarias para detectar e informar sobre las fugas de memoria utilizando la biblioteca CRT.

    Otra posibilidad podría ser que el usuario no esté asignando memoria utilizando las funciones de gestión de memoria CRT, como malloc(), calloc() y realloc(). Si la memoria se asigna utilizando otros métodos, como el operador new de C++, es posible que la biblioteca CRT no pueda rastrear e informar correctamente sobre las fugas de memoria.

    En general, se recomienda al usuario que revise su código y se asegure de incluir correctamente el archivo de cabecera crtdbg.h y utilizar las funciones de gestión de memoria CRT para rastrear la asignación de memoria en su programa. También podrían probar a agregar declaraciones de depuración adicionales o utilizar una herramienta de detección de fugas de memoria para identificar la fuente del problema.</crtdbg.h>

Comments are closed.