Udostępnij za pośrednictwem


_CrtSetAllocHook

Instaluje funkcji alokacji zdefiniowanymi przez klienta przez podczepiania go do procesu alokacji pamięci c debugowania run-time (tylko wersja debugowania).

_CRT_ALLOC_HOOK _CrtSetAllocHook(
   _CRT_ALLOC_HOOK allocHook 
);

Parametry

  • allocHook
    Nowa funkcja alokacji zdefiniowanymi przez klienta do hook do procesu alokacji pamięci c run-time debugowania.

Wartość zwracana

Zwraca wartość funkcji hook wcześniej zdefiniowanej alokacji, lub NULL Jeśli allocHook jest NULL.

Uwagi

_CrtSetAllocHookumożliwia spinanie ma własną funkcję alokacji do procesu alokacji pamięci biblioteki c run-time debugowania aplikacji.W wyniku każde wywołanie funkcji alokacji debugowania przydzielić, ponownego przydzielenia lub wolne wywołanie funkcji hook aplikacji wyzwalaczy bloku pamięci._CrtSetAllocHookzapewnia aplikacji prosta metoda badania, jak aplikacja obsługuje sytuacji niewystarczającej ilości pamięci, możliwość zbadania wzorców przydziału i możliwość logowania się informacje dotyczące alokacji dla późniejszej analizy.Gdy _DEBUG nie jest zdefiniowana, wzywa do _CrtSetAllocHook są usuwane w czasie wstępnego przetwarzania.

_CrtSetAllocHook Funkcja instaluje nową funkcję alokacji zdefiniowanymi przez klienta, określone w allocHook i zwraca wartość funkcji wcześniej zdefiniowanych haka.Poniższy przykład ilustruje, jak powinny być zdefiniowała hook alokacji zdefiniowanymi przez klienta:

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

allocType Argument określa typ operacji alokacji (_HOOK_ALLOC, _HOOK_REALLOC, i _HOOK_FREE) wyzwalane, że wywołanie funkcji hook alokacji.Gdy wyzwalającego typu alokacji jest _HOOK_FREE, userData jest wskaźnikiem do sekcji danych użytkownika bloku pamięci zamiar zwolniona.Jednakże, gdy wyzwalającego typu alokacji jest _HOOK_ALLOC lub _HOOK_REALLOC, userData jest NULL , ponieważ blok pamięci nie została jeszcze przydzielona.

sizeOkreśla rozmiar pamięci, zablokować w bajtach, blockType wskazuje typ bloku pamięci requestNumber jest numerem kolejności obiekt alokacji bloku pamięci i, jeśli jest dostępny, filename i lineNumber określić liczbę nazwę i linii pliku źródłowego której zainicjowano wyzwalającego operacja alokacji.

Po zakończeniu funkcji haka przetwarzanie, musi ona zwracać wartość logiczną, która nakazuje procesu głównych alokacji run-time c sposobu kontynuowania.Kiedy funkcja hook chce procesu alokacji głównego do kontynuowania Jeśli funkcja hook miał nigdy nie została wywołana, a następnie powinna zwrócić funkcja hak TRUE.Powoduje to, że operacja alokacji wyzwalającego oryginalne mają być wykonane.Przy użyciu tej implementacji, funkcja hak można gromadzić i Zapisz informacje o alokacji dla późniejszej analizy, bez zakłócania bieżąca operacja alokacji lub Państwo sterty debugowania.

Kiedy funkcja hook chce procesu alokacji głównego do kontynuowania Jeśli wywołano wyzwalającego operacja alokacji nie powiodło się, a funkcja hook należy zwrócić FALSE.Przy użyciu tej implementacji, funkcja hak można symulować szeroką gamę warunki pamięci i debugowania sterty Państwa, aby sprawdzić, jak aplikacja obsługuje każdej sytuacji.

Aby wyczyścić funkcji hak, przekazać NULL do _CrtSetAllocHook.

Aby uzyskać więcej informacji dotyczących sposobu _CrtSetAllocHook może być używany z innych funkcji zarządzania pamięcią dostępnych lub pisać własne funkcje zdefiniowane przez klienta hak, zobacz Piśmie swój własny debugowanie Hook funkcji.

[!UWAGA]

_CrtSetAllocHooknie jest obsługiwane w ramach /clr:pure.

Wymagania

Rozpoczęto wykonywanie procedury

Wymaganego nagłówka

_CrtSetAllocHook

<crtdbg.h>

Informacji dotyczących zgodności, zobacz zgodności we wprowadzeniu.

Biblioteki

Debug wersje biblioteki uruchomieniowej c tylko.

Przykład

Przykładowy sposób _CrtSetAllocHook, zobacz crt_dbg2.

Odpowiednik w programie .NET Framework

Nie dotyczy. Aby wywołać standardowych funkcji C, należy użyć PInvoke. Aby uzyskać więcej informacji, zobacz Przykłady wywołać platformy.

Zobacz też

Informacje

Debugowania procedur

_CrtGetAllocHook