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


_CrtIsValidHeapPointer

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

int _CrtIsValidHeapPointer( 
   const void *userData 
);

Параметры

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

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

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

Заметки

_CrtIsValidHeapPointer функция используется для того, чтобы гарантировать определенный адрес памяти в локальной куче.Локальная куча относится к созданной управляемой куче и указанным экземпляром библиотеки времени выполнения c.Если библиотека динамической компоновки (DLL) содержит статическую ссылку на библиотеку времени выполнения, то она имеет свой собственный экземпляр кучи среды выполнения, и поэтому ее собственной кучи, независимо от локальной куче приложения.После _Отладка не указывает, вызовы _CrtIsValidHeapPointer удалите во время предварительной обработки.

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

_ASSERTE( _CrtIsValidHeapPointer( userData ) );

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

Требования

Процедура

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

_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. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

См. также

Ссылки

Подпрограммы отладка