Oracle® Solaris Studio 12.4: dbx コマンドによるデバッグ

印刷ビューの終了

更新: 2015 年 1 月
 
 

起こり得るリーク

実行時検査では、「起こり得る」リークを 2 つのケースで報告できます。最初のケースは、ブロックの先頭を指しているポインタは見つからないが、ブロックの内部を指しているポインタが見つかった場合です。このケースは、「ブロック中のアドレス」(aib) エラーとして報告されます。ブロックの内部を指している浮遊ポインタが実際のメモリーリークになります。ただし、プログラムによってはポインタに対して故意にそのような動作をさせている場合があり、このケースはメモリーリークになりません。RTC はこの違いを判別できないため、本当にリークが発生しているかどうかはユーザー自身の判断で行う必要があります。

2 つ目のタイプの起こり得るリークは、データ領域内にはブロックへのポインタが見つからないが、レジスタ内にポインタが見つかった場合に発生します。このケースは、「レジスタ中のアドレス」(air) エラーとして報告されます。レジスタが誤ってブロックを指している場合や、それが以前に失われたメモリーポインタの古いコピーである場合、これは実際のリークです。ただし、コンパイラが最適化のために、ポインタをメモリーに書き込むことなく、レジスタのブロックに対して参照させることがありますが、この場合はメモリーリークではありません。そのため、プログラムが最適化されており、そのレポートが showleaks コマンドの結果であった場合、それは実際のリークでない可能性があります。 リークでない可能性があります。詳細については、showleaks コマンドを参照してください。


注 -  RTC リーク検査では、標準の libc malloc/free/realloc 関数またはこれらの関数に基づいたアロケータを使用する必要があります。その他のアロケータについては、実行時検査アプリケーションプログラミングインタフェースを参照してください。