Versiones de depuración de las funciones de asignación del montón

La biblioteca de tiempo de ejecución de C (CRT) contiene versiones especiales de depuración de las funciones de asignación del montón. Estas funciones tienen los mismos nombres que las versiones release con _dbg anexadas. En este artículo se describen las diferencias entre la versión release de una función de CRT y la _dbg versión, utilizando malloc y _malloc_dbg como ejemplos.

Comportamiento en compilaciones de depuración

Cuando _DEBUG se define, el CRT asigna todas las malloc llamadas a _malloc_dbg. Por lo tanto, no es necesario volver a escribir el código mediante _malloc_dbg en lugar de malloc recibir las ventajas durante la depuración.

No obstante, se puede llamar a _malloc_dbg explícitamente. Llamar explícitamente a _malloc_dbg presenta algunas ventajas adicionales:

  • Seguimiento de asignaciones de tipos _CLIENT_BLOCK.

  • Almacenamiento del archivo de código fuente y número de línea donde se produjo la solicitud de asignación de memoria.

Si no desea convertir las malloc llamadas a _malloc_dbg, puede obtener la información del archivo de origen definiendo _CRTDBG_MAP_ALLOC, lo que hace que el preprocesador asigne directamente todas las llamadas a malloc_malloc_dbg en lugar de confiar en un contenedor alrededor mallocde .

Para realizar un seguimiento de los tipos de asignaciones que existen en los bloques cliente de forma independiente, se debe llamar directamente a _malloc_dbg y asignar a blockType el parámetro _CLIENT_BLOCK.

Comportamiento en compilaciones que no son de depuración

Cuando _DEBUG no se define, las llamadas a malloc no se molestan, las llamadas a se resuelven mallocen _malloc_dbg , la definición de se omite y no se proporciona información de _CRTDBG_MAP_ALLOC archivo de origen relativa a la solicitud de asignación. Dado malloc que no tiene un parámetro de tipo de bloque, las solicitudes de _CLIENT_BLOCK tipos se tratan como asignaciones estándar.

Consulte también

Técnicas de depuración de CRT