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