Sdílet prostřednictvím


_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_REALLOCa _HOOK_FREE), která aktivovala volání funkce háku přidělení. Pokud je _HOOK_FREEaktivač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.

sizeurč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í _CrtSetAllocHooknaleznete v tématu crt_dbg2.

Viz také

Rutiny ladění
_CrtGetAllocHook