_rtl_heapwalk
alloc.h:インデックス への移動
ヘッダーファイル
malloc.h
カテゴリ
メモリルーチン
プロトタイプ
int _rtl_heapwalk(_HEAPINFO *hi);
説明
ヒープをノードごとに検査します。
メモ: _heapwalk は使用されなくなり,この関数に置き換えられました。
_rtl_heapwalk は,ヒープに問題がないと仮定します。_rtl_heapwalk を使用する前に,_heapchk を使ってヒープを検証してください。ヒープ上の最後のブロックでは,_HEAPOK が返されます。_rtl_heapwalk の次の呼び出しでは,_HEAPEND が返されます。
_rtl_heapwalk は,_HEAPINFO 型(malloc.h で宣言)の構造体へのポインタを受け取ります。_HEAPINFO 構造体は,(malloc() を使って)ヒープ上に割り当てる必要があります。スタック上に宣言された変数のアドレスを渡すことはできません。
_rtl_heapwalk の最初の呼び出しでは,hi._pentry フィールドを NULL に設定します。_rtl_heapwalk は,hi._pentry に最初のブロックのアドレスを格納して戻ります。
hi._size |
ブロックのサイズ(バイト単位)を保持します。 |
hi._useflag |
ブロックが現在使用中の場合に _USEDENTRY に設定されるフラグです。ブロックが使用されていない場合,hi._useflag は _FREEENTRY に設定されます。 |
戻り値
この関数は,次のいずれかの値を返します。
_HEAPBADNODE |
破損したヒープブロックが見つかりました。 |
_HEAPBADPTR |
_pentry フィールドが有効なヒープブロックを指していません。 |
_HEAPEMPTY |
ヒープが存在しません。 |
_HEAPEND |
ヒープの終わりに到達しました。 |
_HEAPOK |
_heapinfo ブロックに,次のヒープブロックに関する有効な情報が含まれています。 |
例
#include <stdio.h>
#include <malloc.h>
#include <alloc.h>
#define NUM_PTRS 10
#define NUM_BYTES 16
int main( void )
{
_HEAPINFO *hi;
char *array[ NUM_PTRS ];
int i;
hi = (_HEAPINFO *) malloc( sizeof(_HEAPINFO) );
for( i = 0; i < NUM_PTRS; i++ )
array[ i ] = (char *) malloc( NUM_BYTES );
for( i = 0; i < NUM_PTRS; i += 2 )
free( array[ i ] );
hi->_pentry = NULL;
printf( " Size Status\n" );
printf( " ---- ------\n" );
while( _rtl_heapwalk( hi ) == _HEAPOK )
printf( "%7u %s\n", hi->_size, hi->_useflag ? "used" : "free" );
free( hi );
return 0;
}
移植性
POSIX | Win32 | ANSI C | ANSI C++ |
---|---|---|---|
+ |