_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.