_CrtSetBreakAlloc
Establece un punto de interrupción en un número de orden de asignación de objetos especificado (solo versión de depuración).
Sintaxis
long _CrtSetBreakAlloc(
long lBreakAlloc
);
Parámetros
lBreakAlloc
Número de orden de asignación para el que se va a establecer el punto de interrupción.
Valor devuelto
Devuelve el número de orden de asignación de objetos anterior que tenía establecido un punto de interrupción.
Comentarios
_CrtSetBreakAlloc
permite que una aplicación lleve a cabo la detección de pérdidas de memoria, mediante la interrupción en un punto concreto de la asignación de memoria y la trazabilidad del origen de la solicitud. La función usa el número de orden de la asignación de objetos secuencial asignado al bloque de memoria cuando se asignó en el montón. Cuando _DEBUG
no se define, las llamadas a _CrtSetBreakAlloc
se quitan durante el preprocesamiento.
El número de orden de la asignación de objetos se almacena en el campo lRequest
de la estructura _CrtMemBlockHeader
, que se define en Crtdbg.h. Cuando alguna de las funciones de volcado de depuración proporciona información sobre un bloque de memoria, este número aparece encerrado entre llaves, por ejemplo, {36}.
Para más información sobre cómo se puede usar _CrtSetBreakAlloc
con otras funciones de administración de memoria, consulte Seguimiento de las solicitudes de asignación en el montón. Para más información sobre cómo se asignan, inicializan y administran los bloques de memoria en la versión de depuración del montón base, consulte Detalles del montón de depuración de CRT.
Requisitos
Routine | Encabezado necesario |
---|---|
_CrtSetBreakAlloc |
<crtdbg.h> |
Para obtener más información sobre compatibilidad, consulte Compatibilidad.
Bibliotecas
Solo versiones de depuración de las bibliotecas en tiempo de ejecución de C.
Ejemplo
// crt_setbrkal.c
// compile with: -D_DEBUG /MTd -Od -Zi -W3 /c /link -verbose:lib -debug
/*
* In this program, a call is made to the _CrtSetBreakAlloc routine
* to verify that the debugger halts program execution when it reaches
* a specified allocation number.
*/
#include <malloc.h>
#include <crtdbg.h>
int main( )
{
long allocReqNum;
char *my_pointer;
/*
* Allocate "my_pointer" for the first
* time and ensure that it gets allocated correctly
*/
my_pointer = malloc(10);
_CrtIsMemoryBlock(my_pointer, 10, &allocReqNum, NULL, NULL);
/*
* Set a breakpoint on the allocation request
* number for "my_pointer"
*/
_CrtSetBreakAlloc(allocReqNum+2);
/*
* Alternate freeing and reallocating "my_pointer"
* to verify that the debugger halts program execution
* when it reaches the allocation request
*/
free(my_pointer);
my_pointer = malloc(10);
free(my_pointer);
my_pointer = malloc(10);
free(my_pointer);
}