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