Udostępnij za pośrednictwem


_CrtIsValidHeapPointer

Sprawdza, czy określony wskaźnik jest w lokalna sterta (tylko wersja debugowania).

int _CrtIsValidHeapPointer(  
   const void *userData  
);

Parametry

  • userData
    Wskaźnik na początku bloku alokacji pamięci.

Wartość zwracana

_CrtIsValidHeapPointerZwraca wartość TRUE, jeśli określony wskaźnik znajduje się w lokalnym sterty.W przeciwnym razie funkcja zwraca wartość FALSE.

Uwagi

_CrtIsValidHeapPointer Funkcja jest używana w celu zapewnienia, że adres pamięci jest w ramach lokalna sterta.Lokalna sterta odnosi się do sterty tworzony i zarządzany przez konkretnego wystąpienia biblioteki wykonawczej C.Jeśli biblioteka dołączana dynamicznie (DLL) zawiera statyczne łącze do biblioteki wykonawczej, ma własne wystąpienie stosu wykonywalna i dlatego własnej sterty, niezależnie od aplikacji lokalna sterta.Gdy _DEBUG nie jest zdefiniowana, wzywa do _CrtIsValidHeapPointer są usuwane podczas przetwarzania wstępnego.

Ponieważ ta funkcja zwraca wartość PRAWDA lub FAŁSZ, mogą być przekazywane do jednego z _ASSERT makra, aby utworzyć prosty błąd debugowania mechanizmu obsługi.Poniższy przykład powoduje błąd potwierdzenia, jeśli podany adres nie jest umieszczony w lokalnym stosu:

_ASSERTE( _CrtIsValidHeapPointer( userData ) );

Aby uzyskać więcej informacji o tym, jak _CrtIsValidHeapPointer może być używany z innymi funkcjami debugowania i makr, zobacz Makra raportowania.Aby uzyskać informacje na temat sposobu, w jaki bloki pamięci są przydzielane, inicjowane i zarządzane w wersji debugowania podstawowej sterty, zobacz Szczegóły dotyczące stosu debugowania CRT.

Wymagania

Procedura

Wymagany nagłówek

_CrtIsValidHeapPointer

<crtdbg.h>

Aby uzyskać więcej informacji na temat zgodności, zobacz Zgodność we Wstępie.

Biblioteki

Debuguj wersje wyłącznie Bibliotek uruchomieniowych C.

Przykład

// 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);
}

Dane wyjściowe

my_pointer has read and write accessibility.
my_pointer is within the local heap.

Odpowiednik w programie .NET Framework

Nie dotyczy. Aby wywołać standardową funkcję C, należy użyć PInvoke. Aby uzyskać więcej informacji, zobacz Przykłady wywoływania platformy.

Zobacz też

Informacje

Procedury debugowania