_CrtIsValidHeapPointer
Verifica che un puntatore specificato sia nell'heap locale (versione di debug solo).
int _CrtIsValidHeapPointer(
const void *userData
);
Parametri
- userData
Puntatore all'inizio di un blocco di memoria allocata.
Valore restituito
_CrtIsValidHeapPointer restituisce TRUE se il puntatore è specificato nell'heap locale.In caso contrario, la funzione restituisce FALSE.
Note
_CrtIsValidHeapPointer la funzione viene utilizzata per garantire che un indirizzo di memoria specifico all'interno dell'heap locale.L'heap locale fa riferimento all'heap creata e gestita da un'istanza particolare della libreria di runtime del linguaggio C.Se una libreria a (DLL) collegamento dinamico contiene un collegamento statico alla libreria di runtime, dispone della propria istanza dell'heap di runtime e pertanto la propria heap, indipendente dall'heap locale dell'applicazione.quando _DEBUG non è definito, le chiamate a _CrtIsValidHeapPointer vengono ignorati durante la pre-elaborazione.
Poiché questa funzione restituisce TRUE o FALSE, può essere passata a una di _ASSERT macro per creare un semplice meccanismo di gestione degli errori di debug.L'esempio seguente genera un errore di asserzione se l'indirizzo specificato non si trova all'interno dell'heap locale:
_ASSERTE( _CrtIsValidHeapPointer( userData ) );
per ulteriori informazioni su come _CrtIsValidHeapPointer può essere utilizzato con altre funzioni di debug e le macro, vedere Utilizzando le macro per la verifica e la creazione di rapporti.Per informazioni su come i blocchi di memoria vengono allocati, inizializzati e vengono gestiti nella versione di debug dell'heap di base, vedere Gestione della memoria e heap di debug.
Requisiti
routine |
Intestazione di associazione |
---|---|
_CrtIsValidHeapPointer |
<crtdbg.h> |
Per ulteriori informazioni sulla compatibilità, vedere compatibilità nell'introduzione.
Librerie
versioni di debug di Librerie di runtime del linguaggio C solo.
Esempio
// 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.
Equivalente .NET Framework
Non applicabile. Per chiamare la funzione c standard, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di pinvoke.