heapchecknode

提供: RAD Studio
移動先: 案内検索

alloc.h:インデックス への移動


ヘッダーファイル

alloc.h

カテゴリ

メモリルーチン

プロトタイプ

int heapchecknode(void *node);

説明

ヒープ上の 1 つのノードをチェックして検証します。

解放されたノードがあり,その空きブロックへのポインタを使って heapchecknode を呼び出した場合,heapchecknode は,_FREEENTRY ではなく _BADNODE を返します。これは,ヒープ上の隣接する空きブロックがマージされ,指定されたブロックが存在しなくなるからです。

戻り値

次のいずれかの値です。

_BADNODE

ノードが見つかりませんでした。

_FREEENTRY

ノードは空きブロックです。

_HEAPCORRUPT

ヒープが破損しています。

_HEAPEMPTY

ヒープが存在しません。

_USEDENTRY

ノードは使用中のブロックです。





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



移植性



POSIX Win32 ANSI C ANSI C++

+