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


_CrtIsMemoryBlock

Проверяет, что указанный блок памяти находится в локальной куче и что он имеет допустимый идентификатор типа блоков отладочной кучи (только отладочная версия).

int _CrtIsMemoryBlock( 
   const void *userData,
   unsigned int size,
   long *requestNumber,
   char **filename,
   int *linenumber 
);

Параметры

  • [входящий] userData
    Указатель на начало блока памяти, который требуется проверить.

  • [входящий] size
    Размер указанного блока (в байтах).

  • [исходящий] requestNumber
    Указатель на номер выделения блока или NULL.

  • [исходящий] filename
    Указатель на имя исходного файла, который запросил блок или NULL.

  • [исходящий] linenumber
    Указатель на номер строки в файле исходного кода или NULL.

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

_CrtIsMemoryBlock возвращает TRUE , если указанный блок памяти находится в локальной куче имеет допустимый идентификатор типа блоков памяти отладочной кучи; в противном случае функция возвращает FALSE.

Заметки

Функция _CrtIsMemoryBlock проверяет, находится ли указанный блок памяти в локальной куче приложения и имеет ли он допустимый идентификатор типа блоков. Эту функцию также можно использовать для получения порядкового номера выделения объекта и имени файла исходного кода/номера строки, в котором было первоначально запрошено выделение блоков памяти. Если для параметров requestNumber, filename или linenumber передаются отличные от NULL значения, _CrtIsMemoryBlock задает этим параметрам значения в заголовке отладки блока памяти, если этот блок находится в локальной куче. Если _DEBUG не определен, то вызовы _CrtIsMemoryBlock удаляются во время предварительной обработки.

Если _CrtIsMemoryBlock завершается ошибкой, возвращается FALSE и выходным параметрам присваиваются значения по умолчанию: 0 для requestNumber и lineNumber и NULL для filename.

Поскольку эта функция возвращает TRUE или FALSE, она может быть передана одному из макросов _ASSERT для создания простого отладочного механизма обработки ошибок. Следующий пример вызывает сбой проверочного утверждения, если адрес не находится в локальной куче:

_ASSERTE( _CrtIsMemoryBlock( userData, size, &requestNumber, 
&filename, &linenumber ) );

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

Требования

Подпрограмма

Обязательный заголовок

_CrtIsMemoryBlock

<crtdbg.h>

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

Библиотеки

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

Пример

Пример см. в разделе _CrtIsValidHeapPointer.

Эквивалент в .NET Framework

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

См. также

Ссылки

Процедуры отладки