heapchecknode

De RAD Studio
Aller à : navigation, rechercher

Remonter à Alloc.h - Index


Header File

alloc.h

Category

Memory Routines

Prototype

int heapchecknode(void *node);

Description

Checks and verifies a single node on the heap.

If a node has been freed and heapchecknode is called with a pointer to the freed block, heapchecknode can return _BADNODE rather than the expected _FREEENTRY. This is because adjacent free blocks on the heap are merged, and the block in question no longer exists.

Return Value

One of the following values:

_BADNODE

Node could not be found

_FREEENTRY

Node is a free block

_HEAPCORRUPT

Heap has been corrupted

_HEAPEMPTY

No heap

_USEDENTRY

Node is a used block



Example



 #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;
 }



Portability



POSIX Win32 ANSI C ANSI C++

+