_CrtIsValidHeapPointer
Verifica che un puntatore specificato sia nell'heap locale (solo per versione di debug).
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 restituirà FALSE.
Note
La funzione _CrtIsValidHeapPointer garantisce che un indirizzo di memoria specifico sia all'interno dell'heap locale. L'heap locale fa riferimento all'heap creata e gestita tramite una determinata istanza della libreria di runtime del linguaggio C. Se una libreria a collegamento dinamico (DLL) contiene un collegamento statico alla libreria di runtime, dispone della propria istanza dell'heap di runtime e pertanto la propria heap, indipendentemente dall'heap locale dell'applicazione. Quando _DEBUG non è definito, le chiamate a _CrtIsValidHeapPointer vengono rimosse durante la pre-elaborazione.
Poiché la funzione restituisce TRUE o FALSE, può essere passata a una delle macro _ASSERT 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 nell'heap locale:
_ASSERTE( _CrtIsValidHeapPointer( userData ) );
Per ulteriori informazioni su come _CrtIsValidHeapPointer può essere utilizzato da altre funzioni e macro di debug, consultare Macro per la creazione di rapporti. Per informazioni su come i blocchi di memoria allocati, vengono inizializzati e vengono gestiti nella versione di debug dell'heap di base, vedere Informazioni dettagliate sull'heap di debug CRT.
Requisiti
Routine |
Intestazione obbligatoria |
---|---|
_CrtIsValidHeapPointer |
<crtdbg.h> |
Per ulteriori informazioni sulla compatibilità, vedere Compatibilità nell'introduzione.
Librerie
Solo versioni di debug di Librerie di runtime C.
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 standard C, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di Invocazione della Piattaforma.