メモリリークの追跡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);
}

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2006/11/22/964235/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。