_CrtSetAllocHook
Nainstaluje funkci přidělení definovanou klientem tak, že ji připojíte k procesu přidělování paměti za běhu jazyka C (pouze ladicí verze).
Syntaxe
_CRT_ALLOC_HOOK _CrtSetAllocHook(
_CRT_ALLOC_HOOK allocHook
);
Parametry
allocHook
Nová funkce přidělení definovaná klientem pro připojení k procesu přidělování paměti za běhu jazyka C.
Vrácená hodnota
Vrátí dříve definovanou funkci háku přidělení, nebo NULL
pokud allocHook
je NULL
.
Poznámky
_CrtSetAllocHook
umožňuje aplikaci připojit vlastní funkci přidělení do procesu přidělování paměti knihovny runtime jazyka C. V důsledku toho každé volání funkce přidělení ladění k přidělení, skutečnému přidělení nebo uvolnění bloku paměti aktivuje volání funkce háku aplikace. _CrtSetAllocHook
poskytuje aplikaci jednoduchou metodou pro testování, jak aplikace zpracovává nedostatečné situace v paměti, schopnost zkoumat vzorce přidělování a příležitost protokolovat informace o přidělení pro pozdější analýzu. Pokud _DEBUG
není definováno, volání, která _CrtSetAllocHook
se mají odebrat během předběžného zpracování.
Funkce _CrtSetAllocHook
nainstaluje novou funkci přidělení definovanou klientem a allocHook
vrátí dříve definovanou funkci háku. Následující příklad ukazuje, jak by se měl vytvořit prototyp háku přidělení definovaného klientem:
int YourAllocHook( int allocType, void *userData, size_t size,
int blockType, long requestNumber,
const unsigned char *filename, int lineNumber);
Argument allocType
určuje typ operace přidělení (_HOOK_ALLOC
, _HOOK_REALLOC
a _HOOK_FREE
), která aktivovala volání funkce háku přidělení. Pokud je _HOOK_FREE
aktivační typ přidělení , userData
je ukazatel na oddíl dat uživatele bloku paměti, který se má uvolnit. Pokud je _HOOK_ALLOC
však aktivační typ přidělení nebo _HOOK_REALLOC
, je NULL
to proto, userData
že blok paměti ještě nebyl přidělen.
size
určuje velikost bloku paměti v bajtech, blockType
označuje typ bloku paměti, requestNumber
je číslo pořadí přidělení objektu bloku paměti, a pokud je k dispozici, a lineNumber
zadejte název zdrojového souboru a číslo řádku, filename
kde byla spuštěna operace aktivace přidělení.
Po dokončení zpracování funkce háku musí vrátit logickou hodnotu, která říká hlavnímu procesu přidělování za běhu jazyka C, jak pokračovat. Když funkce háku chce, aby hlavní proces přidělování pokračoval, jako kdyby se funkce háku nikdy nevolala, měla by funkce háku vrátit TRUE
, což způsobí, že se spustí původní operace aktivace přidělení. Funkce háku může shromáždit a uložit informace o přidělení pro pozdější analýzu, aniž by zasahovala do aktuální operace přidělení nebo stavu haldy ladění.
Když funkce háku chce, aby hlavní proces přidělování pokračoval, jako kdyby byla volána operace aktivace přidělení a selhala, měla by funkce háku vrátit FALSE
. Funkce háku může simulovat širokou škálu podmínek paměti a stavy haldy ladění a otestovat, jak aplikace zpracovává každou situaci.
Chcete-li vymazat funkci háku, předejte NULL
na _CrtSetAllocHook
.
Další informace o tom, jak _CrtSetAllocHook
se dají použít s jinými funkcemi správy paměti nebo jak psát vlastní funkce háku definované klientem, naleznete v tématu Ladění zápisu funkce háku.
Poznámka:
_CrtSetAllocHook
v části /clr:pure se nepodporuje. Možnosti kompilátoru /clr:pure a /clr:safe jsou v sadě Visual Studio 2015 zastaralé a v sadě Visual Studio 2017 se odeberou.
Požadavky
Rutina | Požadovaný hlavičkový soubor |
---|---|
_CrtSetAllocHook |
<crtdbg.h> |
Další informace o kompatibilitě najdete v tématu Kompatibilita.
Knihovny
Ladění pouze verzí knihoven runtime jazyka C.
Příklad
Ukázku použití _CrtSetAllocHook
naleznete v tématu crt_dbg2
.