メモリリークの追跡2006年11月22日 08時52分25秒

メモリリークはいつも厄介だ。割り当てて利用中のメモリを開放してしまい、次の malloc で割り当てられて上書きをしたり、free で開放したメモリを使い続けたりされる。そうすると、問題とは直接関係の無いところで、不定な値が現れ始めて、徐々に破壊されてくのである。

自分の書いたコードならば、ある程度心当たりがあったりするので、比較的楽だ。それが、人の書いた物だと、更に追跡は難しくなる。心当たりになるものも無いし、見当も全くつかない。

そして、メモリリークに当たる時は必ずと言っていい程、人が書いたコードに原因があるものである。そのようなときは、メモリに印を付けると手掛かりになることもある。


#include <stdlib.h>

#define free(x) {(*(char*)x) = (char)__LINE__; free(x);}

int main()
{
        char *string = malloc(10);
        sprintf(string, "1234567");
        printf("before:%s\n", string);
        free(string);
        string = malloc(10);
        printf("after:%x:%s\n", string[0], string);
}