揮発性のメモ2

http://d.hatena.ne.jp/iww/

mtraceのテスト

malloc使用時のメモリリーク調査、デバッグメモ

  1: main()
  2: {
  3:     char *a,*b;
  4:     mtrace();
  5:     
  6:     a=malloc(1024);
  7:     b=malloc(1024);
  8:     free(a);
  9: }

aは開放しているけどbは開放していない。
mtrace()で記録開始。本来muntrace()が必要だけど無くても動く。

$ gcc -g malloctest.c
$ MALLOC_TRACE=hoge.log ./a.out
$ mtrace a.out hoge.log
Memory not freed:
-----------------
   Address     Size     Caller
0x0804a780    0x400  at /home/hoge/malloctest.c:7

環境変数MALLOC_TRACEにログファイルを指定して実行するだけ。
mtraceコマンド(中身はperlスクリプト)で何がメモリリークしているかばっちりわかる。


でも、スレッドセーフではないらしい・・・惜しい・・・
革命の日々! mtraceの使い方

#include <mcheck.h>

class unko {
    int x;
    int y;
};

int main()
{
    mtrace();

    unko A;
    unko *B = new unko();
    unko *C = new unko();
    delete B;
}
$ g++ -g malloctest2.c
$ MALLOC_TRACE=hoge2.log ./a.out
$ mtrace a.out hoge2.log
Memory not freed:
-----------------
   Address     Size     Caller
0x0804a388      0x8  at 0xb7ec0fd7

C++でもなんとなくわかる。アドレスはあとでなんとか