メモリリーク。
AAA *p = NULL; try { AAA *p = new AAA; // 例外を throw する関数呼び出し func_with_exception(); delete p; } catch(exception &) { if(p != NULL) { delete p } }
つまり p というポインタを例外ハンドラで削除しようということだが,p が try ブロックで再定義されている。ので,例外ハンドラで delete しようとする p は当然外の p なので,必ず NULL って感じで。2 日くらい気付かなかった。