RAD Studio
ContentsIndex
PreviousUpNext
heapchecknode

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++ 
 
 
 
Copyright(C) 2008 CodeGear(TM). All Rights Reserved.
What do you think about this topic? Send feedback!