heapwalk
alloc.h:インデックス への移動
ヘッダーファイル
alloc.h
プロトタイプ
int heapwalk(struct heapinfo *hi);
説明
heapwalk を使用して,ヒープ上を 1 ノードずつ移動します。
heapwalk は,ヒープに問題がないと仮定します。heapwalk を使用する前に,heapcheck を使ってヒープを検証してください。ヒープ上の最後のブロックでは,_HEAPOK が返されます。heapwalk の次の呼び出しでは,_HEAPEND が返されます。
heapwalk は,heapinfo 型(alloc.h で宣言)の構造体へのポインタを受け取ります。heapwalk の最初の呼び出しでは,hi.ptr フィールドを null に設定します。heapwalk は,hi.ptr に最初のブロックのアドレスを格納して戻ります。hi.size は,ブロックのサイズ(バイト単位)を保持します。hi.in_use は,ブロックが現在使用中の場合に設定されるフラグです。
戻り値
次のいずれかの値です。
_HEAPEMPTY |
ヒープが存在しません。 |
_HEAPEND |
ヒープの終わりに到達しました。 |
_HEAPOK |
heapinfo ブロックに,次のヒープブロックに関する有効な情報が含まれています。 |
移植性
POSIX | ANSI C | ANSI C++ | Win32 | Win64 | OS X | |
---|---|---|---|---|---|---|
heapwalk | + |
例
#include <stdio.h>
#include <alloc.h>
#define NUM_PTRS 10
#define NUM_BYTES 16
int main(void) {
struct heapinfo hi;
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]);
hi.ptr = NULL;
printf(" Size Status\n");
printf(" ---- ------\n");
while (heapwalk(&hi) == _HEAPOK)
printf("%7u %s\n", hi.size, hi.in_use ? "used" : "free");
return 0;
}