• ベストアンサー

デバッグ中のエラーのことで教えてください。

下のようなエラーが出て困っています。 コンパイルされているのですが、いろいろなサイトを調べましたが、どのようなエラーであるのかが結局わからなかったので、ここで質問しました。 プログラミング環境は、 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のクアッドコアを使用しているので、ここで問題が発生しているとは考えられないです。一体、どのようなエラーなのでしょうか??? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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

kopanda116
質問者

お礼

ソースコードをもう一度見て考えてみたところ、メモリ確保していない領域を解放していました。 エラーの内容に関しては、上のプログラムを一度コーディングしてエラーを出してみたところ、概ね同じようなエラーがでて、大体理解することができました。 この部分のエラーは解消されました。 詳しい回答ありがとうございました。

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

同じくソースがないのでなんともいえんのだけど, たぶん 「delete しちゃいけない領域を delete している」 んではなかろうか. もちろん 「delete しちゃいけない領域を delete している」 といっても「delete しちゃったところをさらに delete してる」とか「new で確保していないところを delete しちゃってる」とかいろいろ考えられるけど, とにかく delete しているところを全部チェック. ちなみに dbgdel.cpp はおそらくあっても無意味.

kopanda116
質問者

お礼

確かにメモリの確保していない領域を解放していました。 このエラーは解消されました。 回答ありがとうございました。

回答No.1

ソースコードがない為、なんともい言えないですが、「_BLOCK_TYPE_IS_VALID」のキーワードで検索した限りでは「メモリ操作関連で問題があるのでは?」と思われます。 たとえば、「pHead」がNULLだったり、または開放された領域を指していたりが考えられます。 dbgdel.cppの52行目付近のソースコードが必要です。 (そこだけとは限りませんが。。。)

kopanda116
質問者

お礼

ソースコードは、事情があり、載せることができなかったのですが、メモリの確保・解放に問題がありました。 回答ありがとうございました。