リーク検査をオンにしておくと、RTC では次のエラーが報告されます。
意味: メモリーリークの可能性がある。割り当てたブロックの先頭に対する参照はないが、そのブロック内のアドレスに対する参照が少なくとも 1 つある。
考えられる原因: そのブロックの先頭を示す唯一のポインタが増分された。
例 :
char *ptr; main() { ptr = (char *)malloc(4); ptr++; /* ブロック中のアドレス */ }
意味: メモリーリークの可能性がある。割り当てられたブロックが解放されておらず、そのブロックに対する参照がプログラムのどこにもないが、レジスタには参照がある。
考えられる原因: コンパイラがプログラム変数をメモリーではなくレジスタにだけ保存している場合にこのエラーになる。最適化をオンにしてコンパイラを実行すると、局所変数や関数パラメータにこのような状況がよく発生する。最適化をオンにしていないのにこのエラーが発生する場合は、メモリーリークが疑われる。ブロックを解放する前に、割り当てられたブロックに対する唯一のポインタが範囲外を指定するとメモリーリークになる。
例:
if (i == 0) { char *ptr = (char *)malloc(4); /* ptr は範囲外になる */ } /* レジスタ中のメモリーリーク */
意味: 割り当てられたブロックが解放されておらず、そのブロックへの参照がプログラム内のどこにも存在しない。
考えられる原因: プログラムが使用されなくなったブロックを解放しなかった。
例:
char *ptr;
ptr = (char *)malloc(1); ptr = 0; /* メモリーリーク (mel) */