Entries

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

MALLOC_CHECK_

タグ: C++ gcc

gccでコンパイルしたプログラムを実行していたら、 qsort の中の malloc でセグメンテーション違反が発生した。

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread -1275348048 (LWP 18592)]
0x006ca560 in malloc_consolidate () from /lib/tls/libc.so.6

どうもどこかで「二重解放」が行われている様な雰囲気なのだが……全て自分のコードならともかく、色んな人が色んな思想で組み立てたコードのため、当たりを付けるのが非常に困難。
ああ、何か簡単に二重解放している箇所を見つけるツールはないものか……と検索してみたらあっさり見つかった。

環境変数 MALLOC_CHECK_

これを

$ export MALLOC_CHECK_=2

として実行するだけで、二重解放が行われた瞬間、プログラムをAbortしてくれる。

Program received signal SIGABRT, Aborted.
[Switching to Thread -1283863632 (LWP 19201)]
0x00983eff in raise () from /lib/tls/libc.so.6

ツールどころか再コンパイルすら必要ない。
想像していたより遥かに楽な方法が用意されていた。

スポンサーサイト

コメント

コメントの投稿

コメントの投稿
管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://idlysphere.blog66.fc2.com/tb.php/51-64c81f43
この記事にトラックバックする(FC2ブログユーザー)

Appendix

タグ

Blog内検索

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。