メモリーリークとは、プログラムで使用するために割り当てられているが、プログラムのデータ領域中のいずれも指していないポインタを持つ、動的に割り当てられたメモリーブロックを言います。そのようなブロックは、ブロックを指しているポインタがないため、プログラムはそれらのブロックを参照できず、ましてや解放することもできません。RTC はこのようなブロックを検知し、報告します。
メモリーリークは仮想メモリーの使用を増やし、一般的にメモリーの断片化を招きます。その結果、プログラムやシステム全体のパフォーマンスが低下する可能性があります。
メモリーリークは、通常、割り当てメモリーを解放しないで、割り当てブロックへのポインタを失うと発生します。メモリーリークの例を次に示します。
void
foo()
{
char *s;
s = (char *) malloc(32);
strcpy(s, "hello world");
return; /* no free of s. Once foo returns, there is no */
/* pointer pointing to the malloc’ed block, */
/* so that block is leaked. */
}リークは、API の不正な使用が原因で起こる可能性があります。
void
printcwd()
{
printf("cwd = %s\n", getcwd(NULL, MAXPATHLEN));
return; /* libc function getcwd() returns a pointer to */
/* malloc’ed area when the first argument is NULL, */
/* program should remember to free this. In this */
/* case the block is not freed and results in leak.*/
}メモリーリークを防ぐには、必要のないメモリーは必ず解放します。また、メモリーを確保するライブラリ関数を使用する場合は、メモリーを解放することを忘れないでください。
解放されていないブロックを「メモリーリーク」と呼ぶこともあります。プログラムがすぐに終了する場合にメモリーを解放しないことは一般的なプログラミング習慣であるため、この定義はほとんど役に立ちません。プログラムがブロックへのポインタを引き続き 1 つ以上保持している場合、実行時検査ではそのブロックをリークとして報告しません。