Sdílet prostřednictvím


_CrtIsValidHeapPointer

Ověří, zda zadaná ukazatel místní haldy (pouze ladicí verzi).

int _CrtIsValidHeapPointer(  
   const void *userData  
);

Parametry

  • userData
    Ukazatel na začátek bloku přidělené paměti.

Vrácená hodnota

_CrtIsValidHeapPointerVrátí hodnotu PRAVDA, pokud je ukazatel na zadanou místní haldy.Jinak vrátí funkce hodnotu FALSE.

Poznámky

_CrtIsValidHeapPointer Funkce se používá k zajištění, že konkrétní paměťové adresy je v rámci místní haldy.Haldy a spravovány v konkrétní instanci běhové knihovny C označuje místní haldy.Pokud dynamická knihovna (DLL) obsahuje staticky propojené knihovny run-time, má svou vlastní instanci haldy run-time a proto vlastní haldy, nezávisle na místní haldy aplikace.Při _DEBUG není definován, je volání do _CrtIsValidHeapPointer jsou odstraněny během předběžného zpracování.

Vzhledem k tomu, že tato funkce vrací hodnotu TRUE nebo FALSE, mohou být předány do jednoho z _ASSERT makra k vytvoření jednoduché ladění chyba zpracování mechanismus.V následujícím příkladu způsobí selhání výrazu Pokud zadaná adresa není umístěn v rámci haldy místní:

_ASSERTE( _CrtIsValidHeapPointer( userData ) );

Další informace o _CrtIsValidHeapPointer lze použít s jinými ladění funkce a makra, viz Makra pro vytváření sestav.Informace o způsobu přidělování, inicializace a správy paměťových bloků v ladicí verzi základní haldy viz Podrobnosti haldy ladění CRT.

Požadavky

Rutina

Požadované záhlaví

_CrtIsValidHeapPointer

<crtdbg.h>

Další informace o kompatibilitě naleznete v úvodu tématu Kompatibilita.

Knihovny

Verze ladění pouze běhových knihoven C.

Příklad

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

Výsledek

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

Ekvivalent v rozhraní .NET Framework

Nelze použít. Pokud chcete volat standardní funkci jazyka C, použijte PInvoke. Další informace naleznete v tématu Příklady vyvolání platformy.

Viz také

Referenční dokumentace

Rutiny ladění