_CrtSetAllocHook
Instaluje funkcji alokacji zdefiniowanymi przez klienta przez podłączając ją do procesu alokacji pamięci debugowania wykonywania C (tylko wersja debugowania).
_CRT_ALLOC_HOOK _CrtSetAllocHook(
_CRT_ALLOC_HOOK allocHook
);
Parametry
- allocHook
Nowa funkcja alokacji zdefiniowanymi przez klienta do podłączenia do procesu alokacji pamięci C debugowania w czasie wykonywania.
Wartość zwracana
Zwraca wartość funkcji hak wcześniej zdefiniowanych alokacji lub NULL Jeśli allocHook jest NULL.
Uwagi
_CrtSetAllocHookpozwala aplikacjom haka ma własną funkcję alokacji w proces alokacji pamięci biblioteki C debugowania w czasie wykonywania.W rezultacie każdego wywołania funkcji alokacji debugowania do przydzielania, ponownego przydzielenia lub zwolnij wyzwalaczy bloku pamięci wywołania funkcji hak aplikacji._CrtSetAllocHookzapewnia aplikacji to prosta metoda do testowania, jak aplikacja obsługuje sytuacje braku pamięci, możliwość zbadania wzorców przydziału i możliwość rejestrowania informacji o alokacji dla późniejszej analizy.Gdy _DEBUG nie jest zdefiniowana, wzywa do _CrtSetAllocHook są usuwane podczas przetwarzania wstępnego.
_CrtSetAllocHook Funkcja instaluje nową funkcję alokacji zdefiniowanymi przez klienta, określona w allocHook i zwraca funkcję wcześniej zdefiniowanych haka.Poniższy przykład ilustruje, jak powinna być prototypy hak 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) który wyzwalane wywołanie funkcji hak alokacji.Gdy wyzwalającego typ alokacji jest _HOOK_FREE, userData jest wskaźnikiem do sekcji danych użytkownika wolność bloku pamięci.Jednak, gdy wyzwalającego typ alokacji jest _HOOK_ALLOC lub _HOOK_REALLOC, userData jest NULL ponieważ blok pamięci nie została jeszcze przydzielona.
sizeOkreśla rozmiar pamięci bloku w bajtach, blockType wskazuje typ blok pamięci requestNumber jest numerem porządkowym obiektu alokacji bloku pamięci i, jeśli to możliwe, filename i lineNumber określić numer nazwy i linii plików źródła której zainicjowano wyzwalającego operacji alokacji.
Po zakończeniu przetwarzania funkcji hak musi ona zwracać wartość logiczną, która wskazuje główny proces wykonywania alokacji C sposobu kontynuowania.Kiedy funkcja hak chce procesu alokacji głównego do kontynuowania Jeśli funkcja haka miał nigdy nie została wywołana, to funkcja hak powinien zwrócić TRUE.Powoduje to, że oryginalny wyzwalającego operacji alokacji ma być wykonane.Przy użyciu tej implementacji, funkcja hak można gromadzić i zapisać informacje dotyczące alokacji dla późniejszej analizy, bez zakłócania bieżącej operacji alokacji lub Państwo sterty debugowania.
Kiedy funkcja hak chce procesu alokacji głównego do kontynuowania Jeśli wywołano wyzwalającego operacji alokacji i nie powiodło się, a następnie funkcja hak powinien zwrócić FALSE.Przy użyciu tej implementacji, funkcja hak można symulować cały szereg warunków pamięci i debugowanie sterty Państwa do testowania, jak aplikacja obsługuje każdej sytuacji.
Aby wyczyścić funkcja haka, przekazać NULL do _CrtSetAllocHook.
Aby uzyskać więcej informacji o tym, jak _CrtSetAllocHook może być używany z innych funkcji zarządzania pamięcią dostępnych lub pisanie własnych funkcji hak zdefiniowane przez klienta, zobacz Pisanie debugowanie funkcji punktów zaczepienia.
[!UWAGA]
_CrtSetAllocHooknie jest obsługiwana w obszarze /clr:pure.
Wymagania
Procedura |
Wymagany nagłówek |
---|---|
_CrtSetAllocHook |
<crtdbg.h> |
Aby uzyskać więcej informacji na temat zgodności, zobacz Zgodność we Wstępie.
Biblioteki
Debuguj wersje wyłącznie Bibliotek uruchomieniowych C.
Przykład
Przykładowy sposobów użycia _CrtSetAllocHook, zobacz crt_dbg2.
Odpowiednik w programie .NET Framework
Nie dotyczy. Aby wywołać standardową funkcję C, należy użyć PInvoke. Aby uzyskać więcej informacji, zobacz Przykłady wywoływania platformy.