valgrind便利

mallocでsegmentation errorがでる.しかも常に出るわけではない.これはmalloc前にすでにメモリを破壊していて,たまたまmallocでsegmentation errorがでているのだろう.

昔はこんな時,メモリ破壊を行っているところを1つずつチェックしていたのだけど,今はメモリ使用のプロファイリングしてくれる valgrind (http://valgrind.org/) というツールがあるそうなので使ってみた.

==106016== Invalid write of size 8
==106016== at 0x406615: envque (vque.c:30)
==106016== by 0x405438: control (control.c:161)
==106016== by 0x401801: main (test_generate.c:437)
==106016== Address 0x4d7a230 is 0 bytes after a block of size 2,336 alloc’d
==106016== at 0x4A069EE: malloc (vg_replace_malloc.c:270)
==106016== by 0x406566: initvque (vque.c:13)
==106016== by 0x40517A: control (control.c:110)
==106016== by 0x401801: main (test_generate.c:437)

どうやらqueueのコードにバグがあるみたい.2,336もallocしてないし...
あれ? キューの境界条件を間違っている...orz.ごにょごにょ.

ということで比較的簡単にメモリ関連のバグをとれました.めでたし.

Leave a Reply

メールアドレスが公開されることはありません。 が付いている欄は必須項目です