_CrtIsValidHeapPointer
Verifica se um ponteiro especificado está na pilha de local (somente a versão de depuração).
int _CrtIsValidHeapPointer(
const void *userData
);
Parâmetros
- userData
Ponteiro para o início de um bloco de memória alocada.
Valor de retorno
_CrtIsValidHeapPointerRetorna VERDADEIRO se o ponteiro especificado está na pilha local.Caso contrário, a função retornará FALSE.
Comentários
O _CrtIsValidHeapPointer função é usada para garantir que um endereço de memória específico dentro do heap local.A pilha local refere-se à pilha criado e gerenciado por uma instância específica da biblioteca de tempo de execução C.Se uma biblioteca de vínculo dinâmico (DLL) contém um link estático para a biblioteca de tempo de execução, ele tem sua própria instância do heap de tempo de execução e, portanto, sua própria pilha, independente da pilha de local do aplicativo.Quando _ Debug não está definido, planos de _CrtIsValidHeapPointer são removidos durante o pré-processamento.
Esta função retorna VERDADEIRO ou falso, ele pode ser passado para uma da _ASSERT macros para criar um simples mecanismo de tratamento de erros de depuração.O exemplo a seguir faz com que um erro de declaração se o endereço especificado não está localizado na pilha local:
_ASSERTE( _CrtIsValidHeapPointer( userData ) );
Para obter mais informações sobre como _CrtIsValidHeapPointer pode ser usado com outras funções de depuração e a macros, consulte Usando Macros para verificação e emissão de relatórios.Para obter informações sobre como blocos de memória são alocados, inicializados e gerenciados na versão de depuração da pilha base, consulte Gerenciamento de memória e a pilha de depuração.
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 depuração de bibliotecas de tempo 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.
Equivalência do .NET Framework
Não aplicável. Para chamar a função c padrão, use PInvoke. Para obter mais informações, consulte Exemplos de invocação de plataforma.