2013-05-01 19 views
6

テストケースをデバッグモードで実行しているときに問題があります。「Test.exeで0x7c812fd3の未処理例外:0xE0000003:0xe0000003」というメッセージがポップアップボックスに表示されます。 free.cのコードブレーク:ラインでC++未処理の例外 - デバッグ方法

void __cdecl _free_base (void * pBlock) 
{ 
    int retval = 0; 

    if (pBlock == NULL) 
     return; 

    RTCCALLBACK(_RTC_Free_hook, (pBlock, 0)); 

    retval = HeapFree(_crtheap, 0, pBlock); 
    if (retval == 0) 
    { 
     errno = _get_errno_from_oserr(GetLastError()); 
    } 
} 

"のretval = ..." _crtheap = 0x00df0000とのPblock = 0x967c93d3と。コールスタックは、 "kernel32.dll!7c812fd3()"と呼び出しスタックのさらに下にある別のエントリでブレークします。 "> msvcr100d.dll!_free_base(void * pBlock = 0x967c93d3)Line 50 + 0x13 bytes"

私はかなりのグーグルでグーグルしており、問題はメモリのセーヴレル時間を解放することから来るかもしれません。 このあいまいで厄介な記述にもかかわらず、誰も問題を見つける方法をヒントできますか?多分それを修正する方法?少し奇妙私を打つ何

がリリースモードでテストを実行しているとき、私はこれを経験していないということです...

敬具、 スヴェン

+2

デバッグモードのみのエラーの通常の理由は、初期化されていない変数です。おそらく値を与えられていないポインタを解放しているかもしれません。 – john

+4

リリースモードでは、これらのチェックは行われないため、デバッグモードで通知されるのはなぜですか(リリースでは問題が残っていますが、それ以上のバグは発生していないと幸いです)。あなたが書いた関数になるまでスタックトレースを上げて、何が間違っているのかを調べようとする(例えば、ダブルフリーであるか、実際に割り当てられていないアドレスを解放する)。 – Cameron

+0

もう少し詳しく説明できますか?どのような種類のオブジェクトが解放されていますか?それはスマートなポインタですか? –

答えて

-2

あなたは、ビジュアルの下、これらのテストケースを実行しようとしたことがありスタジオデバッガ? デバッガはこの例外をキャッチする必要があります。コールスタックを確認し、問題の場所を特定できます。

+0

'_free_base'で例外が発生しています。彼はすでにこれを知っています。しかし、デバッガは問題をキャッチしていません(以前に発生したヒープの破損) –

+0

その場合、デバッガを使用してすべてのテストケースコードを実行し、例外を生成する部分を見つけます。 – Zuljin

+0

うわー。このような素朴なアドバイスは、遠隔操作のバグを経験したことのない人からのみ得られます。私はあなたがうらやましい。 –