Condividi tramite


_CrtSetAllocHook

Installa una funzione di allocazione definita dal client collegandola al processo di allocazione della memoria di debug del runtime del linguaggio C (solo versione di debug).

Sintassi

_CRT_ALLOC_HOOK _CrtSetAllocHook(
   _CRT_ALLOC_HOOK allocHook
);

Parametri

allocHook
Nuova funzione di allocazione definita dal client da collegare al processo di allocazione della memoria di debug del runtime del linguaggio C.

Valore restituito

Restituisce la funzione hook di allocazione definita in precedenza o NULL se allocHook è NULL.

Osservazioni:

_CrtSetAllocHook consente a un'applicazione di collegare la propria funzione di allocazione al processo di allocazione della memoria della libreria di debug del runtime del linguaggio C. Di conseguenza, ogni chiamata a una funzione di allocazione di debug per allocare, riallocare o liberare un blocco di memoria attiva una chiamata alla funzione hook dell'applicazione. _CrtSetAllocHook fornisce un'applicazione con un metodo semplice per testare 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 analisi successive. Quando _DEBUG non è definito, le chiamate a _CrtSetAllocHook vengono rimosse durante la pre-elaborazione.

La funzione _CrtSetAllocHook installa la nuova funzione di allocazione definita dal client specificata in allocHook e restituisce la funzione hook definita in precedenza. Nell'esempio seguente viene illustrato come dovrebbe essere il prototipo di una funzione hook di allocazione definita dal client:

int YourAllocHook( int allocType, void *userData, size_t size,
                   int blockType, long requestNumber,
                   const unsigned char *filename, int lineNumber);

L'argomento allocType specifica il tipo di operazione di allocazione (_HOOK_ALLOC, _HOOK_REALLOCe _HOOK_FREE) che ha attivato la chiamata alla funzione hook dell'allocazione. Quando il tipo di allocazione di attivazione è _HOOK_FREE, userData è un puntatore alla sezione di dati utente del blocco di memoria che verrà liberato. Tuttavia, quando il tipo di allocazione di attivazione è _HOOK_ALLOC o _HOOK_REALLOC, userData è NULL perché il blocco di memoria non è ancora stato allocato.

size specifica le dimensioni del blocco di memoria in byte, blockType indica il tipo di blocco di memoria, requestNumber è il numero di ordine dell'allocazione di oggetto del blocco di memoria e, se disponibile, filename e lineNumber specificano 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 ha terminato l'elaborazione, deve restituire un valore booleano che indica al processo di allocazione principale di runtime del linguaggio C come procedere. Quando la funzione hook vuole che il processo di allocazione principale continui come se la funzione hook non fosse mai stata chiamata, la funzione hook dovrebbe restituire TRUE, che causa l'esecuzione dell'operazione di allocazione di trigger originale. La funzione hook può raccogliere e salvare le informazioni sull'allocazione per un'analisi successiva, senza interferire con l'operazione di allocazione corrente o lo stato dell'heap di debug.

Quando la funzione hook richiede che il processo di allocazione principale continui come se l'operazione di allocazione di attivazione sia stata chiamata e avesse avuto esito negativo, la funzione hook deve restituire FALSE. La funzione hook può simulare un'ampia gamma di condizioni di memoria e gli stati dell'heap di debug per verificare come l'applicazione gestisce ogni situazione.

Per annullare la funzione hook, passare NULL a _CrtSetAllocHook.

Per altre informazioni su come _CrtSetAllocHook usare con altre funzioni di gestione della memoria o su come scrivere funzioni hook definite dal client, vedere Eseguire il debug della funzione hook scrittura.

Nota

_CrtSetAllocHook non è supportato in /clr:pure. Le opzioni del compilatore /clr:pure e /clr:safe sono deprecate in Visual Studio 2015 e rimosse in Visual Studio 2017.

Requisiti

Ciclo Intestazione obbligatoria
_CrtSetAllocHook <crtdbg.h>

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

Librerie

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

Esempio

Per un esempio di come usare _CrtSetAllocHook, vedere crt_dbg2.

Vedi anche

Routine di debug
_CrtGetAllocHook