_rtl_heapwalk

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu alloc.h - Index


Header-Datei

malloc.h

Kategorie

Speicherroutinen

Prototyp

int _rtl_heapwalk(_HEAPINFO *hi);

Beschreibung

Überprüft den Heap Knoten für Knoten.

Anmerkung:  Diese Funktion ersetzt die Funktion _heapwalk, die veraltet ist.

_rtl_heapwalk setzt voraus, dass der Heap korrekt ist. Überprüfen Sie den Heap zuerst mit _heapchk, bevor Sie _rtl_heapwalk aufrufen. _HEAPOK wird zusammen mit dem letzten Block des Heap-Speichers zurückgegeben. Beim nächsten Aufruf von _rtl_heapwalk wird _HEAPEND zurückgegeben.

_rtl_heapwalk wird ein Zeiger auf eine Struktur vom Typ _HEAPINFO (der in malloc.h deklariert ist) übergeben. Beachten Sie, dass für die Struktur _HEAPINFO Speicher auf dem Heap reserviert werden muss (mit malloc()). Sie können nicht die Adresse einer auf dem Stack deklarierten Variablen übergeben.

Beim ersten Aufruf von _rtl_heapwalk muss das Feld hi._pentry auf NULL gesetzt werden. Im Rückgabewert von _rtl_heapwalk enthält hi._pentry die Adresse des ersten Blocks.

hi._size

enthält die Größe des Blocks in Byte.

hi._useflag

ist ein Flag, das auf _USEDENTRY gesetzt wird, wenn der Block belegt ist. Wenn der Block frei ist, wird _useflag auf _FREEENTRY gesetzt.



Rückgabewert

Diese Funktion gibt einen der folgenden Werte zurück:

_HEAPBADNODE

Es wurde ein beschädigter Heap-Block gefunden.

_HEAPBADPTR

Das Feld _pentry zeigt auf keinen gültigen Heap-Block.

_HEAPEMPTY

Es ist kein Heap-Speicher vorhanden.

_HEAPEND

Es wurde das Ende des Heap erreicht.

_HEAPOK

Der _heapinfo-Block enthält gültige Informationen über den nächsten Heap-Block.



Beispiel



 #include <stdio.h>
 #include <malloc.h>
 #include <alloc.h>
 #define NUM_PTRS  10
 #define NUM_BYTES 16
 int main(void)
 {
    _HEAPINFO *hi;
    char *array[ NUM_PTRS ];
    int i;
    hi = (_HEAPINFO *) malloc( sizeof(_HEAPINFO) );
    for( i = 0; i < NUM_PTRS; i++ )
       array[ i ] = (char *) malloc( NUM_BYTES );
    for( i = 0; i < NUM_PTRS; i += 2 )
      free( array[ i ] );
    hi->_pentry = NULL;
    printf( "   Size   Status\n" );
    printf( "   ----   ------\n" );
    while( _rtl_heapwalk( hi ) == _HEAPOK )
      printf( "%7u    %s\n", hi->_size, hi->_useflag ? "used" : "free" );
    free( hi );
    return 0;
 }



Portabilität



POSIX Win32 ANSI C ANSI C++

+