Condividi tramite


_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.

Vedere anche

Riferimenti

Routine di debug