メモリーリーク検査が有効になっている場合、メモリーリークのためのスキャンは、テスト対象のプログラムが終了する直前に自動的に実行されます。検出されたリークはすべて報告されます。このプログラムを、kill コマンドで強制終了してはいけません。 次の例は、メモリーリークエラーの標準的なメッセージです。
Memory leak (mel): Found leaked block of size 6 at address 0x21718 At time of allocation, the call stack was: [1] foo() at line 63 in test.c [2] main() at line 47 in test.c
UNIX プログラムには、そのプログラムの最上位のユーザー関数である main 手続き (f77 では MAIN と呼ばれます) が含まれています。プログラムは exit(3) が呼び出されるか、main から返った時点で終了します。後者の場合は、戻ったあとに main にローカルなすべての変数がスコープから外れるため、大域変数がこれらの同じブロックを指していないかぎり、それらの変数が指していたヒープブロックはすべてリークとして報告されます。
プログラムは終了しようとしており、exit() を呼び出すことなく main から復帰するため、一般的なプログラミング習慣では、main で局所変数に割り当てられたヒープブロックを解放しません。これらのブロックがメモリーリークとして報告されないようにするには、main 内の最後の実行可能なソース行にブレークポイントを設定することによって、main から復帰する直前でプログラムを停止します。プログラムがそこで停止したとき、RTC の showleaks コマンドを実行すれば、main() とそこで呼び出されるすべての手続きで参照されなくなったヒープブロックのすべてが表示されます。
詳細については、showleaks コマンドを参照してください。