heapchecknode

Aus RAD Studio
Wechseln zu: Navigation, Suche

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

+