メモリリーク。
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 日くらい気付かなかった。