Condividi tramite


_CrtSetBreakAlloc

Imposta un punto di interruzione su un numero di ordine di allocazione dell'oggetto (solo versione di debug).

Sintassi

long _CrtSetBreakAlloc(
   long lBreakAlloc
);

Parametri

lBreakAlloc
Numero di ordine di allocazione per il quale impostare il punto di interruzione.

Valore restituito

Restituisce il precedente numero di ordine di allocazione dell'oggetto che presentava un punto di interruzione impostato.

Osservazioni:

_CrtSetBreakAlloc consente a un'applicazione di eseguire il rilevamento della perdita di memoria eseguendo l'interruzione in un punto specifico dell'allocazione di memoria e risalendo all'origine della richiesta. La funzione usa il numero di ordine di allocazione dell'oggetto assegnato al blocco di memoria al momento dell'allocazione nell'heap. Quando _DEBUG non è definito, le chiamate a _CrtSetBreakAlloc vengono rimosse durante la pre-elaborazione.

Il numero dell'ordine di allocazione dell'oggetto viene archiviato nel lRequest campo della _CrtMemBlockHeader struttura, definito in Crtdbg.h. Quando le informazioni su un blocco di memoria vengono segnalate da una delle funzioni di dump di debug, questo numero è racchiuso tra parentesi graffe, ad esempio {36}.

Per altre informazioni su come _CrtSetBreakAlloc usare con altre funzioni di gestione della memoria, vedere Rilevamento delle richieste di allocazione dell'heap. Per altre informazioni sulla modalità di allocazione, inizializzazione e gestione dei blocchi di memoria nella versione di debug dell'heap di base, vedere Dettagli dell'heap di debug CRT.

Requisiti

Ciclo Intestazione obbligatoria
_CrtSetBreakAlloc <crtdbg.h>

Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).

Librerie

Solo le versioni di debug delle librerie di runtime di C.

Esempio

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

Vedi anche

Routine di debug