[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[linux-users:95114] memory leak


はじめまして、齋藤@横浜 と申します。
  現在、RedHatLinux6.2J を使用してプログラム作成などを行っております。

  早速なのですが、
  memory leakで分からない事があるので、どなたか御教授頂けたら幸いです。

以下のようなテストプログラムを作成しました。(といってもプログラムとは呼べ
ませんが...)
  ============= start test.c===================
  #include <time.h>

  int main(int argc, char *argv[])
  {
     time_t t;
     struct tm *l;

     t = time((time_t *)0);
     l = localtime((const time_t *)&t);
     exit(0);
  }
  ============= end test.c=====================

  このプログラムを以下のようにコンパイルします。
  gcc -ggdb -o test test.c -lmpr

  次に環境変数を追加します。
  export MPRPC=`mprpc ./test`
  export MPRFI="cat > mpr.log"

  そして、 ./test を実行し、その後このプログラムでのメモリーリークを調べる
為
  mprleak < mpr.log | mprmap -f -l ./test
  と実行すると以下のようなメッセージが出力されます。

m:__strdup(strdup.c,43):tzset_internal(tzset.c,169):
__tz_convert(tzset.c,582):localtime(localtime.c,43):main(test.c,9):
__libc_start_main(../sysdeps/generic/libc-start.c,92):15:134532896
m:__tzfile_read(tzfile.c,175):tzset_internal(tzset.c,172):
__tz_convert(tzset.c,582):localtime(localtime.c,43):main(test.c,9):
__libc_start_main(../sysdeps/generic/libc-start.c,92):32:134533104
m:__tzstring(tzset.c,108):
__tzfile_read(tzfile.c,277):tzset_internal(tzset.c,172):
__tz_convert(tzset.c,582):localtime(localtime.c,43):main(test.c,9):
__libc_start_main(../sysdeps/generic/libc-start.c,92):12:134532920
m:__tzstring(tzset.c,108):
__tzfile_read(tzfile.c,277):tzset_internal(tzset.c,172):
__tz_convert(tzset.c,582):localtime(localtime.c,43):main(test.c,9):
__libc_start_main(../sysdeps/generic/libc-start.c,92):12:134532936

これは、メモリリークではないのでしょうか?
実際にlocaltime()関数も追ってみたのですが、どうも一度呼ばれたlocaltime()の
ある部分をメモリーに残して2度目からlocaltime()が呼ばれるとそのメモリーも利
用するとなっているようです。
ただそうなると、プロセスが終了するときにそのメモリーを開放するような関数が
なくてはいけないような気がします。(間違っているかも知れませんが)

今回はmprというソフトを使用しましたが、この他に、Checker(9.9.1)を使用しよう
としましたが、コンパイルが通らず断念しました。

使用している環境:
   glibc -> glibc-2.1.3-15 , glibc-devel-2.1.3-15
   mpr  -> mpr-2.2-1

以上、長くなってしまいましたが宜しくお願いいたします。

この情報があなたの探していたものかどうか選択してください。
yes/まさにこれだ!   no/違うなぁ   part/一部見つかった   try/これで試してみる

あなたが探していた情報はどのようなことか、ご自由に記入下さい。特に「まさにこれだ!」と言う場合は記入をお願いします。
例:「複数のマシンからCATV経由でipmasqueradeを利用してWebを参照したい場合の設定について」
Follow-Ups: