ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Oracle Solaris Studio 12.3 Discover および Uncover ユーザーズガイド Oracle Solaris Studio 12.3 Information Library (日本語) |
SUNW_DISCOVER_FOLLOW_FORK_MODE 環境変数
「メモリーリーク (Memory Leaks)」タブの使用法
システムライブラリは報告されたエラーに影響を及ぼす可能性がある
Discover は多数のメモリーアクセスエラー、およびエラーである可能性のあるアクセスに関する警告を検出および報告します。
Discover は次のメモリーアクセスエラーを検出します。
ABR: 配列範囲外からの読み取り (beyond Array Bounds Read)
ABW: 配列範囲外への書き込み (beyond Array Bounds Write)
BFM: 不正な空きメモリー (Bad Free Memory)
BRP: 不正な realloc アドレスパラメータ (Bad Realloc address Parameter)
CGB: 破壊された配列ガードブロック (Corrupted array Guard Block)
DFM: メモリーの二重解放 (Double Freeing Memory)
FMR: 解放されたメモリーからの読み取り (Freed Memory Read)
FMW: 解放されたメモリーへの書き込み (Freed Memory Write)
FRP: 解放された realloc パラメータ (Freed Realloc Parameter)
IMR: 無効なメモリーからの読み取り (Invalid Memory Read)
IMW: 無効なメモリーへの書き込み (Invalid Memory Write)
メモリーリーク
OLP: 送り側と受け側の重複 (OverLaPping source and destination)
PIR: 部分的に初期化された領域からの読み取り (Partially Initialized Read)
SBR: スタックフレームの範囲外からの読み取り (beyond Stack frame Bounds Read)
SBW: スタックフレームの範囲外への書き込み (beyond Stack frame Bounds Write)
UAR: 非割り当てメモリーからの読み取り (UnAllocated memory Read)
UAW: 非割り当てメモリーへの書き込み (UnAllocated memory Write)
UMR: 非初期化メモリーからの読み取り (Unitialized Memory Read)
次のセクションに、これらのエラーの一部を生成する簡単なサンプルプログラムを一覧表示します。
// ABR: reading memory beyond array bounds at address 0x%1x (%d byte%s)" int *a = (int*) malloc(sizeof(int[5])); printf("a[5] = %d\n",a[5]);
// ABW: writing to memory beyond array bounds int *a = (int*) malloc(sizeof(int[5])); a[5] = 5;
// BFM: freeing wrong memory block int *p = (int*) malloc(sizeof(int)); free(p+1);
// BRP is "bad address parameter for realloc 0x%1x" int *p = (int*) realloc(0,sizeof(int)); int *q = (int*) realloc(p+20,sizeof(int[2]));
// DFM is "double freeing memory" int *p = (int*) malloc(sizeof(int)); free(p); free(p);'
// FMR is "reading from freed memory at address 0x%1x (%d byte%s)" int *p = (int*) malloc(sizeof(int)); free(p); printf("p = 0x%h\n",p);
// FMW is "writing to freed memory at address 0x%1x (%d byte%s)" int *p = (int*) malloc(sizeof(int)); free(p); *p = 1;
// FRP: freed pointer passed to realloc int *p = (int*) malloc(sizeof(int)); free(0); int *q = (int*) realloc(p,sizeof(int[2]));
// IMR: read from invalid memory address int *p = 0; int i = *p; // generates Signal 11...
// IMW: write to invalid memory address int *p = 0; *p = 1; // generates Signal 11...
char *s=(char *) malloc(15); memset(s, 'x', 15); memcpy(s, s+5, 10); return 0;
// PIR: accessing partially initialized data int *p = (int*) malloc(sizeof(int)); *((char*)p) = 'c'; printf("*(p = %d\n",*(p+1));
int a[2]={0,1}; printf("a[-10]=%d\n",a[-10]); return 0;
int a[2]={0,1)' a[-10]=2; return 0;
// UAR is "reading from unallocated memory" int *p = (int*) malloc(sizeof(int)); printf("*(p+1) = %d\n",*(p+1));
// UAW is "writing to unallocated memory" int *p = (int*) malloc(sizeof(int)); *(p+1) = 1;
// UMR is "accessing uninitialized data from address 0x%1x (A%d byte%s)" int *p = (int*) malloc(sizeof(int)); printf("*p = %d\n",*p);
Discover は次のメモリーアクセスの警告を報告します。
AZS: 0 サイズの割り当て (allocating zero size)
SMR: 投機的な非初期化メモリーからの読み取り (speculative unitialized memory read)
次のセクションは、AZS 警告を生成する簡単なプログラム例を一覧表示します。
// AZS: allocating zero size memory block int *p = malloc();