_rtl_heapwalk

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

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

+