_CrtSetAllocHook

Устанавливает определяемую клиентом функцию выделения памяти путем ее прикрепления к отладочному процессу выделения памяти среды выполнения языка C (только отладочная версия).

Синтаксис

_CRT_ALLOC_HOOK _CrtSetAllocHook(
   _CRT_ALLOC_HOOK allocHook
);

Параметры

allocHook
Новая, определенная клиентом функция выделения памяти, которую требуется прикрепить к отладочному процессу выделения памяти среды выполнения C.

Возвращаемое значение

Возвращает ранее определенную функцию-обработчик выделения памяти или значение NULL, если параметр allocHook имеет значение NULL.

Замечания

Функция _CrtSetAllocHook позволяет приложению прикрепить свою собственную функцию выделения памяти к процессу выделения памяти в отладочной библиотеке среды выполнения C. В результате каждый вызов функции отладочного выделения памяти для выделения, перераспределения или освобождения блока памяти запускает вызов функции-обработчика приложения. Функция _CrtSetAllocHook предоставляет приложению простой метод проверки того, как приложение обрабатывает ситуации недостатка памяти, возможность проверять шаблоны выделения памяти и возможность записывать в журнал данные выделения памяти для дальнейшего анализа. Если _DEBUG это не определено, вызовы _CrtSetAllocHook удаляются во время предварительной обработки.

Функция _CrtSetAllocHook устанавливает новую определенную клиентом функцию выделения памяти, указанную в параметре allocHook, и возвращает ранее определенную функцию-обработчик. В следующем примере показано, как должен объявляться прототип определяемого клиентом обработчика выделения памяти:

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

Аргумент allocType указывает тип операции выделения (_HOOK_ALLOC, _HOOK_REALLOCи _HOOK_FREE), которая вызвала вызов функции перехватчика выделения. Если запускающим типом выделения памяти является _HOOK_FREE, параметр userData представляет собой указатель на раздел пользовательских данных блока памяти, который должен быть освобожден. Тем не менее, если тип выделения триггера или _HOOK_ALLOC_HOOK_REALLOC, userData это NULL связано с тем, что блок памяти еще не выделен.

Параметр size определяет размер блока памяти в байтах, параметр blockType указывает тип блока памяти, параметр requestNumber является порядковым номером объекта выделения блока памяти, и, если доступны, параметры filename и lineNumber указывают исходное имя файла и номер строки, где был запущен процесс выделения.

После обработки функция-обработчик должна возвращать логическое значение, которое указывает главному процессу выделения памяти среды выполнения C, как продолжить выполнение. Если функция перехватчика хочет, чтобы основной процесс выделения продолжался, как если бы функция перехватчика никогда не была вызвана, функция перехватчика должна вернуться TRUE, что приводит к выполнению исходной операции выделения триггера. Функция перехватчика может собирать и сохранять сведения о выделении для последующего анализа, не вмешиваясь в текущую операцию выделения или состояние отладочной кучи.

Если функция-обработчик требует, чтобы главный процесс выделения продолжал выполнение, как если бы операция выделения памяти была запущена и завершилась неудачей, функция-обработчик должна возвращать значение FALSE. Функция перехватчика может имитировать широкий спектр условий памяти и отладочные состояния кучи, чтобы проверить, как приложение обрабатывает каждую ситуацию.

Чтобы удалить функцию-обработчик, передайте значение NULL в функцию _CrtSetAllocHook.

Дополнительные сведения о том, как _CrtSetAllocHook можно использовать с другими функциями управления памятью или как писать собственные клиентские функции перехватчика, см. в статье "Запись функции перехватчика отладки".

Примечание.

_CrtSetAllocHook не поддерживается в / clr:pure. Параметры компилятора /clr:pure и /clr:safe компилятора устарели в Visual Studio 2015 и удалены в Visual Studio 2017.

Требования

Маршрут Обязательный заголовок
_CrtSetAllocHook <crtdbg.h>

Дополнительные сведения о совместимости см. в разделе Совместимость.

Библиотеки

Только отладочные версии библиотек времени выполнения языка C.

Пример

Пример использования _CrtSetAllocHookсм. в разделе crt_dbg2.

См. также

Отладка подпрограмм
_CrtGetAllocHook