_rtl_heapwalk
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++ |
---|---|---|---|
+ |