プロが教える店舗&オフィスのセキュリティ対策術

下のようなエラーが出て困っています。
コンパイルされているのですが、いろいろなサイトを調べましたが、どのようなエラーであるのかが結局わからなかったので、ここで質問しました。

プログラミング環境は、
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のクアッドコアを使用しているので、ここで問題が発生しているとは考えられないです。一体、どのようなエラーなのでしょうか???



よろしくお願いします。

A 回答 (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() 行 196C
    • good
    • 1
この回答へのお礼

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

お礼日時:2009/09/09 14:57

同じくソースがないのでなんともいえんのだけど, たぶん


「delete しちゃいけない領域を delete している」
んではなかろうか. もちろん
「delete しちゃいけない領域を delete している」
といっても「delete しちゃったところをさらに delete してる」とか「new で確保していないところを delete しちゃってる」とかいろいろ考えられるけど, とにかく delete しているところを全部チェック.
ちなみに dbgdel.cpp はおそらくあっても無意味.
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/09/09 14:58

ソースコードがない為、なんともい言えないですが、「_BLOCK_TYPE_IS_VALID」のキーワードで検索した限りでは「メモリ操作関連で問題があるのでは?」と思われます。


たとえば、「pHead」がNULLだったり、または開放された領域を指していたりが考えられます。

dbgdel.cppの52行目付近のソースコードが必要です。
(そこだけとは限りませんが。。。)
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/09/09 14:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A