heapchecknode
Nach oben zu alloc.h - Index
Header-Datei
alloc.h
Kategorie
Speicherroutinen
Prototyp
int heapchecknode(void *node);
Beschreibung
Überprüft einen einzelnen Knoten auf dem Heap.
Wenn der Knoten freigegeben wurde und heapchecknode mit einem Zeiger auf den freigegebenen Block aufgerufen wird, kann heapchecknode den Wert _BADNODE zurückgeben statt des erwarteten Werts _FREEENTRY. Der Gründ hierfür ist, dass nebeneinander liegende Blöcke auf dem Heap zusammengeführt werden und der fragliche Block nicht mehr existiert.
Rückgabewert
Einer der folgenden Werte:
_BADNODE |
Der Knoten konnte nicht gefunden werden. |
_FREEENTRY |
Der durch node bezeichnete Block ist frei. |
_HEAPCORRUPT |
Der Heap ist beschädigt. |
_HEAPEMPTY |
Es ist kein Heap-Speicher vorhanden. |
_USEDENTRY |
Der durch node bezeichnete Block ist belegt. |
Beispiel
#include <stdio.h>
#include <alloc.h>
#define NUM_PTRS 10
#define NUM_BYTES 16
int main(void)
{
char *array[ NUM_PTRS ];
int i;
for( i = 0; i < NUM_PTRS; i++ )
array[ i ] = (char *) malloc( NUM_BYTES );
for( i = 0; i < NUM_PTRS; i += 2 )
free( array[ i ] );
for( i = 0; i < NUM_PTRS; i++ )
{
printf( "Node %2d ", i );
switch( heapchecknode( array[ i ] ) )
{
case _HEAPEMPTY:
printf( "No heap.\n" );
break;
case _HEAPCORRUPT:
printf( "Heap corrupt.\n" );
break;
case _BADNODE:
printf( "Bad node.\n" );
break;
case _FREEENTRY:
printf( "Free entry.\n" );
break;
case _USEDENTRY:
printf( "Used entry.\n" );
break;
default :
printf( "Unknown return code.\n" );
break;
}
}
return 0;
}
Portabilität
POSIX | Win32 | ANSI C | ANSI C++ |
---|---|---|---|
+ |