Condividi tramite


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

Vedere anche

Riferimenti

Procedura di debug