Freigeben über


_CrtIsValidHeapPointer

Überprüft, ob ein angegebener Zeiger im lokalen Heap (nur Debugversion) ist.

int _CrtIsValidHeapPointer( 
   const void *userData 
);

Parameter

  • userData
    Zeiger auf den Anfang eines belegten Speicherblocks.

Rückgabewert

_CrtIsValidHeapPointer gibt TRUE zurück, wenn der angegebene Zeiger im lokalen Heap befindet.Andernfalls gibt die Funktion FALSE zurück.

Hinweise

Die _CrtIsValidHeapPointer-Funktion wird verwendet, um sicherzustellen, dass einer bestimmten Speicheradresse im lokalen Heap befindet.Der lokale Heap verweist auf den Heap an, der durch eine bestimmte Instanz der C-Laufzeitbibliothek erstellt und verwaltet wird.Wenn eine DLL (Dynamic Link Library) einen statischen Link zu der Laufzeitbibliothek enthält, verfügt sie über eine eigene Instanz des Ablaufzeit heaps und daher seines eigenen Heaps, unabhängig vom lokalen Heap der Anwendung.Wenn _DEBUG nicht definiert wird, werden Aufrufe _CrtIsValidHeapPointer während des Präprozessorlaufs entfernt.

Da diese Funktion TRUE oder FALSE zurückgibt, kann sie auf eines der _ASSERT Makros übergeben werden, um einen einfachen Mechanismus zur fehlerbehandlungs Debuggen zu erstellen.Das folgende Beispiel führt zu einem Assertionsfehler, wenn die angegebene Adresse sich nicht im lokalen Heap befindet:

_ASSERTE( _CrtIsValidHeapPointer( userData ) );

Weitere Informationen zum Debuggen mit anderen _CrtIsValidHeapPointer-Funktionen und Makros verwendet werden kann, finden Sie unter Verwenden von Makros zum Überprüfen und Berichterstellung.Weitere Informationen zum Speicherblöcke in der Debugversion des Basisheaps zugeordnet, initialisiert und verwaltet werden, finden Sie unter Speicherverwaltung und Debugheap.

Anforderungen

Routine

Erforderlicher Header

_CrtIsValidHeapPointer

<crtdbg.h>

Weitere Informationen finden Sie unter Kompatibilität Kompatibilität in der Einführung.

Bibliotheken

Debugversionen von nur C .

Beispiel

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

.NET Framework-Entsprechung

Nicht zutreffend. Um die Standard-C-Funktion aufrufen, verwenden Sie PInvoke. Weitere Informationen finden Sie unter Plattformaufruf-Beispiele.

Siehe auch

Referenz

Debug- Routinen