Partilhar via


_CrtIsValidHeapPointer

Verifica se é um ponteiro especificado no heap de local (somente versão de depurar).

int _CrtIsValidHeapPointer( 
   const void *userData 
);

Parâmetros

  • userData
    Ponteiro para o início de um bloco de memória alocada.

Valor de retorno

_CrtIsValidHeapPointer Retorna VERDADEIRO se o ponteiro especificado está no heap de local. Caso contrário, a função retornará falso.

Comentários

The _CrtIsValidHeapPointer função é usada para garantir que seja um endereço de memória específico dentro do heap do local. Local heap refere-se ao heap criado e gerenciado por uma instância específica da biblioteca C Runtime.Se uma biblioteca de vínculo dinâmico (DLL) contém um link estático para o em time de execução biblioteca, ela tem sua própria instância do em time de execução pilha e, portanto, sua própria pilha, independente da pilha de local do aplicativo.Quando _DEBUG não estiver definido, chamadas de _CrtIsValidHeapPointer serão removidos durante a pré-processamento.

Como essa função retorna verdadeiro ou falso, ele pode ser passado para um o _ASSERT macros para criar um simples mecanismo de tratamento de erro de depuração.O exemplo a seguir faz com que um erro de declaração se o endereço especificado não estiver localizado dentro de heap de local:

_ASSERTE( _CrtIsValidHeapPointer( userData ) );

Para obter mais informações sobre como _CrtIsValidHeapPointer pode ser usado com outras funções de depurar e as macros, consulte Usando macros para verificação e emissão de relatórios.Para obter informações sobre como os blocos de memória são alocados, inicializado e gerenciado na versão de depurar do heap de base, consulte A pilha de depurar e gerenciamento de memória.

Requisitos

Rotina

Cabeçalho necessário

_CrtIsValidHeapPointer

<crtdbg.h>

Para obter mais informações de compatibilidade, consulte Compatibilidade na introdução.

Bibliotecas

Versões de depurar de Bibliotecas de time de execução c somente.

Exemplo

// 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);
}

Saída

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

Equivalente do NET Framework

Não aplicável. Para telefonar a função C padrão, use PInvoke. Para obter mais informações, consulte Exemplos de invocação de plataforma.

Consulte também

Referência

Rotinas de depurar