Поделиться через


Функции-ловушки выделения

Этот раздел применим к:

Выпуск

Visual Basic

C#

F#

C++

Web Developer

Express

Тема не применяется Тема не применяется Тема не применяется

Только машинные коды

Тема не применяется

Pro, Premium и Ultimate

Тема не применяется Тема не применяется Тема не применяется

Только машинные коды

Тема не применяется

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

Примечание

Следует знать об ограничениях функций библиотеки CRT в функциях-ловушках выделения, описанных в разделе Ловушки выделения и выделения памяти CRT.

Функция-ловушка выделения должна иметь следующий прототип:

int YourAllocHook(int nAllocType, void *pvData,
        size_t nSize, int nBlockUse, long lRequest,
        const unsigned char * szFileName, int nLine )

Указатель, который передается _CrtSetAllocHook, имеет тип _CRT_ALLOC_HOOK, как определено в CRTDBG.H:

typedef int (__cdecl * _CRT_ALLOC_HOOK)
    (int, void *, size_t, int, long, const unsigned char *, int);

Когда библиотека CRT вызывает ловушку, аргумент nAllocType показывает, какого вида операция выделения будет выполнена (_HOOK_ALLOC, _HOOK_REALLOC или _HOOK_FREE). В случае освобождения или перераспределения, pvData содержит указатель на пользовательскую часть освобождаемого блока. Однако в случае выделения памяти этот указатель пуст, так как выделение еще не произошло. Остальные аргументы содержат размер запрашиваемого выделения, его тип блока, номер последующего запроса, связанный с выделением запроса, и указатель на имя файла и номер строки, в которой было сделано выделение (если доступно). После того как функция-ловушка выполнит анализ и другие запрограммированные автором действия, она должна вернуть или значение TRUE, означающее, что операция выделения может продолжаться, или значение FALSE в случае предполагаемого сбоя операции. Простая ловушка этого типа может проверить количество выделенной до настоящего момента памяти и вернуть FALSE в случае превышения лимита. В таком случае в приложении могут возникать ошибки выделения памяти, которые обычно возникают только при большой нехватке доступной памяти. Более сложные ловушки могут отслеживать структуру выделения, анализировать использование памяти или сообщать о возникновении какой-либо определенной ситуации.

См. также

Задачи

Образец crt_dbg2: отладочные функции-ловушки для среды выполнения C

Основные понятия

Ловушки выделения и выделения памяти CRT

Другие ресурсы

Написание функций отладочных ловушек