Compartir a través de


_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);
}

Vea también

Rutinas de depuración