- ベストアンサー
デバッグ中のエラーのことで教えてください。
下のようなエラーが出て困っています。 コンパイルされているのですが、いろいろなサイトを調べましたが、どのようなエラーであるのかが結局わからなかったので、ここで質問しました。 プログラミング環境は、 Microsoft Visual Studio .NET 2003 です。 OSはWindows XP SP3 です。 Debug Assertion Failed! File:dbgdel.cpp Line:52 Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse) For information on how your program can cause an assertion failure, see the Visul C++ documentation on asserts. というエラーが出ます。 メモリ容量、CPUに関しては4GB,クロック3GHzのクアッドコアを使用しているので、ここで問題が発生しているとは考えられないです。一体、どのようなエラーなのでしょうか??? よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
これはランタイムエラーなのですが dbgdel.cpp:52が悪いわけではなく それを読んでいるプログラムが悪いのです コールスタックを表示してみてください(デバッグ->ウィンドウ->呼び出し履歴かな?) 例えば次のプログラム char* p = new char; delete p; delete p; これで確実に同じエラーとなります エラーダイアログが表示されたら「再試行(R)」を選んでください コールスタックには以下のような表示が出ます 質問者が言っているのはAですが、ここが悪いのではなく これを呼んだBが悪いのです (Bをダブルクリックすると、該当ソースに飛びます) A.skelton.exe!operator delete(void * pUserData=0x00bb5b48) 行 52 + 0x51 バイト C++ B.skelton.exe!WinMain(HINSTANCE__ * hInst=0x00400000, HINSTANCE__ * __formal=0x00000000, HINSTANCE__ * __formal=0x00000000, HINSTANCE__ * __formal=0x00000000) 行 512 + 0x15 バイト C++ C.skelton.exe!__tmainCRTStartup() 行 324 + 0x35 バイト C D.skelton.exe!WinMainCRTStartup() 行 196 C
その他の回答 (2)
- Tacosan
- ベストアンサー率23% (3656/15482)
同じくソースがないのでなんともいえんのだけど, たぶん 「delete しちゃいけない領域を delete している」 んではなかろうか. もちろん 「delete しちゃいけない領域を delete している」 といっても「delete しちゃったところをさらに delete してる」とか「new で確保していないところを delete しちゃってる」とかいろいろ考えられるけど, とにかく delete しているところを全部チェック. ちなみに dbgdel.cpp はおそらくあっても無意味.
お礼
確かにメモリの確保していない領域を解放していました。 このエラーは解消されました。 回答ありがとうございました。
- toda hiro(@hiro_knigh)
- ベストアンサー率39% (59/151)
ソースコードがない為、なんともい言えないですが、「_BLOCK_TYPE_IS_VALID」のキーワードで検索した限りでは「メモリ操作関連で問題があるのでは?」と思われます。 たとえば、「pHead」がNULLだったり、または開放された領域を指していたりが考えられます。 dbgdel.cppの52行目付近のソースコードが必要です。 (そこだけとは限りませんが。。。)
お礼
ソースコードは、事情があり、載せることができなかったのですが、メモリの確保・解放に問題がありました。 回答ありがとうございました。
お礼
ソースコードをもう一度見て考えてみたところ、メモリ確保していない領域を解放していました。 エラーの内容に関しては、上のプログラムを一度コーディングしてエラーを出してみたところ、概ね同じようなエラーがでて、大体理解することができました。 この部分のエラーは解消されました。 詳しい回答ありがとうございました。