AIXのダブルフリーの検出機能について。
その昔のメモ。
毎回探すのが大変なのでここに。
環境変数を指定して実行するだけで、ダブルフリーがわかります。 ちと古いマニュアルページ 実行例 $ cat -n mtest.c 1 #include2 #include 3 4 int 5 main() 6 { 7 char *p; 8 9 p = (char*) malloc (1000); 10 11 free(p); 12 free(p); 13 14 return 0; 15 } 16 17 $ xlc -g mtest.c #↓ちなみに、普通に実行しても何も起きません。 $ ./a.out #↓環境変数を設定して実行します。 $ MALLOCTYPE=debug MALLOCDEBUG=validate_ptrs ./a.out Debug Malloc: Buffer (0x20001c18) has already been free'd. IOT/Abort trap (core dumped) $ dbx a.out core ヘルプを見るには 'help' とタイプしてください。 シンボル情報を読取り中です... [core 中のメモリ・イメージの使用 ] IOT/Abort trap in raise at 0xd01de228 0xd01de228 (raise+0x4c) 80410014 lwz r2,0x14(r1) (dbx) where raise(??) at 0xd01de228 abort() at 0xd01ece20 do_validate_part2(??, ??, ??) at 0xd01d931c do_debug_free(??) at 0xd01d8fd4 main(), line 12 in "mtest.c"