RAD Studio |  |

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

Copy Code

    #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) 2009 Embarcadero Technologies, Inc. All Rights Reserved.
What do you think about this topic? Send feedback!