_CrtSetAllocHook
Installa una funzione di allocazione definita dal client agganciandola nel processo di allocazione della memoria di debug CRT (versione di debug solo).
_CRT_ALLOC_HOOK _CrtSetAllocHook(
_CRT_ALLOC_HOOK allocHook
);
Parametri
- allocHook
Nuova funzione di allocazione definita dal client al processo di allocazione della memoria di debug di runtime del linguaggio C.
Valore restituito
Restituisce la funzione definiti in precedenza hook di allocazione, o NULL se allocHook viene NULL.
Note
_CrtSetAllocHook consente di associare la propria funzione di allocazione nel processo di allocazione della memoria della libreria di debug CRT.Di conseguenza, ogni chiamata a una funzione di allocazione di debug da allocare, riallocare, o liberare i trigger di un blocco di memoria una chiamata alla funzione hook dell'applicazione._CrtSetAllocHook fornisce una domanda con un metodo semplice di test come l'applicazione gestisce situazioni di memoria insufficiente, la possibilità di esaminare schemi di allocazione e la possibilità di registrare le informazioni di allocazione per tracciature.quando _DEBUG non è definito, le chiamate a _CrtSetAllocHook vengono ignorati durante la pre-elaborazione.
_CrtSetAllocHook la funzione di installare la nuova funzione di allocazione definita dal client specificata in allocHook e restituisce la funzione hook definiti in precedenza.Nell'esempio seguente viene illustrato un hook di allocazione definito dal client deve essere prototipo:
int YourAllocHook( int allocType, void *userData, size_t size, int
blockType, long requestNumber, const unsigned char *filename, int
lineNumber);
allocType l'argomento indica il tipo di operazione di allocazione (_HOOK_ALLOC, _HOOK_REALLOCe _HOOK_FREE) che ha attivato la chiamata alla funzione hook di allocazione.Quando il tipo di allocazione di attivazione viene _HOOK_FREE, userData è un puntatore alla sezione di dati utente del blocco di memoria che sarà liberato.Tuttavia, quando il tipo di allocazione di attivazione viene _HOOK_ALLOC o _HOOK_REALLOC, userData viene NULL poiché il blocco di memoria non è stato allocato ancora.
size specifica le dimensioni del blocco di memoria in byte, blockType indica il tipo di blocco di memoria, requestNumber è il numero di ordini di allocazione di oggetti del blocco di memoria e, se disponibile, filename e lineNumber specificare il nome del file di origine e il numero di riga in cui l'operazione di allocazione di attivazione è stata avviata.
Dopo che la funzione hook sia terminata l'elaborazione, deve restituire un valore booleano, che fornisce al processo di allocazione principale di runtime del linguaggio C come procedere.Quando la funzione hook intende il processo di allocazione principale per continuare come se la funzione hook non fosse mai chiamata, la funzione hook dovrà restituire TRUE.In questo modo l'operazione originale di allocazione di attivazione a essere eseguita.L'utilizzo di questa implementazione, la funzione hook può raggruppare e salvare le informazioni di allocazione per tracciature, senza interferire con l'operazione di allocazione o lo stato corrente dell'heap di debug.
Quando la funzione hook intende il processo di allocazione principale per continuare come se l'operazione di allocazione di attivazione venga chiamata e non riesce, la funzione hook dovrà restituire FALSE.L'utilizzo di questa implementazione, la funzione hook possibile simulare un insieme di stati della memoria e dell'heap di debug per verificare come l'applicazione gestisce le diverse situazioni.
Per annullare la funzione hook, passare NULL in _CrtSetAllocHook.
per ulteriori informazioni su come _CrtSetAllocHook può essere utilizzato con altre funzioni di gestione della memoria o come scrivere per contenere le funzioni hook definite dal client, vedere Scrittura di funzioni hook di debug.
[!NOTA]
_CrtSetAllocHook non è di seguito supportato /clr:pure.
Requisiti
routine |
Intestazione di associazione |
---|---|
_CrtSetAllocHook |
<crtdbg.h> |
Per ulteriori informazioni sulla compatibilità, vedere compatibilità nell'introduzione.
Librerie
versioni di debug di Librerie di runtime del linguaggio C solo.
Esempio
Per un esempio di utilizzo _CrtSetAllocHook, vedere crt_dbg2.
Equivalente .NET Framework
Non applicabile. Per chiamare la funzione c standard, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di pinvoke.