Udostępnij za pośrednictwem


_CrtSetAllocHook

Instaluje funkcję alokacji zdefiniowaną przez klienta przez podłączenie jej do procesu alokacji pamięci debugowania w czasie wykonywania C (tylko wersja debug).

Składnia

_CRT_ALLOC_HOOK _CrtSetAllocHook(
   _CRT_ALLOC_HOOK allocHook
);

Parametry

allocHook
Nowa funkcja alokacji zdefiniowana przez klienta do podłączenia do procesu alokacji pamięci debugowania w czasie wykonywania C.

Wartość zwracana

Zwraca wcześniej zdefiniowaną funkcję punktu zaczepienia alokacji lub NULL , jeśli allocHook ma wartość NULL.

Uwagi

_CrtSetAllocHook umożliwia aplikacji dołączenie własnej funkcji alokacji do procesu alokacji biblioteki debugowania w czasie wykonywania języka C. W rezultacie, każde wywołanie funkcji alokacji debugowania do przydzielania, ponownego przydzielenia lub zwolnienia bloku pamięci wyzwala wywołanie funkcji podłączania aplikacji. _CrtSetAllocHook Udostępnia aplikację łatwą metodą testowania sposobu, w jaki aplikacja obsługuje niewystarczające sytuacje pamięci, możliwość badania wzorców alokacji oraz możliwość rejestrowania informacji alokacji na potrzeby późniejszej analizy. Gdy _DEBUG nie jest zdefiniowana, wywołania do _CrtSetAllocHook są usuwane podczas przetwarzania wstępnego.

Funkcja _CrtSetAllocHook instaluje nową funkcję alokacji zdefiniowaną przez klienta określoną w allocHook pliku i zwraca wcześniej zdefiniowaną funkcję punktu zaczepienia. Poniższy przykład ilustruje, jak powinny być prototypowane zdefiniowane przez klienta funkcje punktu zaczepienia alokacji:

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

Argument allocType określa typ operacji alokacji (_HOOK_ALLOC, _HOOK_REALLOCi _HOOK_FREE), która wyzwoliła wywołanie funkcji punktu zaczepienia alokacji. Gdy wyzwalający typ alokacji to _HOOK_FREE, userData jest wskaźnikiem do sekcji danych użytkownika bloku pamięci, który ma zostać zwolniony. Jednak gdy typ alokacji wyzwalania to _HOOK_ALLOC lub _HOOK_REALLOC, userData jest NULL to, że blok pamięci nie został jeszcze przydzielony.

sizeOkreśla rozmiar bloku pamięci w bajtach, blockType wskazuje typ bloku pamięci, requestNumber jest numerem kolejności alokacji obiektu bloku pamięci, a jeśli jest dostępny, oraz lineNumber określ nazwę pliku źródłowego i numer wiersza, filename w którym zainicjowano operację alokacji wyzwalającej.

Po zakończeniu przetwarzania funkcji podłączania, musi ona zwracać wartość logiczną, która wskazuje głównemu procesowi alokacji środowiska uruchomieniowego C sposób kontynuowania. Gdy funkcja haka chce, aby główny proces alokacji był kontynuowany tak, jakby funkcja haka nigdy nie została wywołana, funkcja haka powinna zwrócić TRUEwartość , co powoduje wykonanie oryginalnej operacji alokacji wyzwalającej. Funkcja haka może zbierać i zapisywać informacje o alokacji na potrzeby późniejszej analizy bez zakłócania bieżącej operacji alokacji lub stanu sterty debugowania.

Gdy funkcja hakowania chce, aby główny proces alokacji był kontynuowany tak, jakby operacja alokacji wyzwalania została wywołana i zakończyła się niepowodzeniem, funkcja haka powinna zwrócić wartość FALSE. Funkcja haka może symulować szeroką gamę warunków pamięci i debugować stany sterty w celu przetestowania sposobu obsługi każdej sytuacji przez aplikację.

Aby wyczyścić funkcję haka, przekaż NULL do ._CrtSetAllocHook

Aby uzyskać więcej informacji o tym, jak _CrtSetAllocHook można używać z innymi funkcjami zarządzania pamięcią lub jak pisać własne funkcje haka zdefiniowane przez klienta, zobacz Debug hook function writing (Pisanie funkcji haka debugowania).

Uwaga

_CrtSetAllocHook program nie jest obsługiwany w obszarze /clr:pure. Opcje kompilatora /clr:pure i /clr:safe są przestarzałe w programie Visual Studio 2015 i usuwane w programie Visual Studio 2017.

Wymagania

Procedura Wymagany nagłówek
_CrtSetAllocHook <crtdbg.h>

Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.

Biblioteki

Debugowanie tylko wersji bibliotek czasu wykonywania języka C.

Przykład

Aby zapoznać się z przykładem korzystania z programu _CrtSetAllocHook, zobacz crt_dbg2.

Zobacz też

Procedury debugowania
_CrtGetAllocHook