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


_CrtIsValidHeapPointer

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

int _CrtIsValidHeapPointer(  
   const void *userData  
);

Параметры

  • userData
    Указатель на начало выделенного блока памяти.

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

_CrtIsValidHeapPointer возвращает TRUE, если данный указатель расположен в локальной куче. В противном случае функция возвращает значение false.

Заметки

Функция _CrtIsValidHeapPointer используется, чтобы гарантировать, что указанный адрес памяти расположен в локальной куче. Локальная куча относится к куче, созданной и управляемой конкретным экземпляром библиотеки времени выполнения C. Если библиотека динамической компоновки (DLL) содержит статическую ссылку на библиотеку времени выполнения, она имеет собственный экземпляр кучи времени выполнения, не зависящий от локальной кучи приложения. Если _DEBUG не определен, то вызовы _CrtIsValidHeapPointer удаляются во время предварительной обработки.

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

_ASSERTE( _CrtIsValidHeapPointer( userData ) );

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

Требования

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

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

_CrtIsValidHeapPointer

<crtdbg.h>

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

Библиотеки

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

Пример

// crt_isvalid.c
/*
 * This program allocates a block of memory using _malloc_dbg
 * and then tests the validity of this memory by calling 
 * _CrtIsMemoryBlock,_CrtIsValidPointer, and _CrtIsValidHeapPointer.
 */

#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <crtdbg.h>

#define  TRUE   1
#define  FALSE  0

int main( void )
{
        char *my_pointer;

        /* 
         * Call _malloc_dbg to include the filename and line number
         * of our allocation request in the header information
         */
        my_pointer = (char *)_malloc_dbg( sizeof(char) * 10, 
        _NORMAL_BLOCK, __FILE__, __LINE__ );

        // Ensure that the memory got allocated correctly
        _CrtIsMemoryBlock((const void *)my_pointer, sizeof(char) * 10, 
        NULL, NULL, NULL );

         // Test for read/write accessibility
        if (_CrtIsValidPointer((const void *)my_pointer, 
        sizeof(char) * 10, TRUE))
                printf("my_pointer has read and write accessibility.\n");
        else
                printf("my_pointer only has read access.\n");

        // Make sure my_pointer is within the local heap
        if (_CrtIsValidHeapPointer((const void *)my_pointer))
                printf("my_pointer is within the local heap.\n");
        else
                printf("my_pointer is not located within the local"
                       " heap.\n");

        free(my_pointer);
}

Output

my_pointer has read and write accessibility.
my_pointer is within the local heap.

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

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

См. также

Ссылки

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