Háky přidělení a přidělení běhové paměti jazyka C
Je velmi důležité omezení funkcí přidělení hák, je nutné explicitně Ignorovat _CRT_BLOCK bloky (přidělení paměti interně provedené funkcí C Runtime library) Pokud provádějí volání funkce C Runtime library přidělit vnitřní paměti._CRT_BLOCK Bloky lze ignorovat, včetně kódu jako zavěšení na začátku vašeho přidělení následující funkce:
if ( nBlockUse == _CRT_BLOCK )
return( TRUE );
Pokud vaše přidělení háčkem Neignoruje _CRT_BLOCK blokuje, pak lze libovolnou funkci C Runtime library v vaše háčkem soutisk program v nekonečné smyčce.Například printf provádí interní přidělení.Pokud háčkem kód volá printf, pak výsledné rozdělení způsobí háčkem k znovu, který bude volat printf znovu, a tak dále až přetečení zásobníku.Chcete-li sestavu _CRT_BLOCK operace přidělení je jeden způsob, jak toto omezení obejít pomocí funkcí rozhraní API systému Windows než c spuštění funkce a formátování a výstupní.Protože rozhraní API systému Windows pomocí haldy C Runtime library, jejich soutisk v přidělení háčkem v nekonečné smyčce.
Pokud přezkoumat run-time knihovny zdrojových souborů zobrazí, že přidělení výchozího zavěšení funkce, CrtDefaultAllocHook (které jednoduše vrátí TRUE), je umístěn v samostatném souboru vlastní, DBGHOOK.C.Pokud chcete, aby vaše háčkem přidělení se nazývá i pro prostředků spuštění při spuštění kódu, který je spuštěn před vaší aplikace hlavní funkci, můžete nahradit výchozí funkce jednu vlastní namísto použití _CrtSetAllocHook.