0

数日以来、C++ソフトウェアに関連するVisualStudio2008の問題に直面しています。Visual Studioの設定を「リリースWin32」モードに設定すると、正常に機能します。

しかし、「Debug Win32」に設定すると、削除を使用するとクラッシュの問題が発生します。コンパイルは問題ありませんが、実行中、ソフトウェアは最初の「削除」でクラッシュします。

このsnaphsotを検討してください:

ここに画像の説明を入力してください

ご覧のとおり、ソフトウェアが「一時を削除」するために到着したとき。コマンドを実行すると、クラッシュして次のメッセージが表示されます。

デバッグアサーションに失敗しました!プログラム...式_BLOCK_TYPE_IS_VALID(pHead-> nBlockHouse)

何が問題ですか?それを解決する方法は?

「リリース」モードでエラーが発生しないのはなぜですか?

ありがとう

4

3 に答える 3

4

あなたはあなたとあなたがdelete何をすべきかだけです。他には何もありません。また、nullポインタを使用して関数を呼び出そうとしています。何もないメソッドを呼び出そうとするとどうなりますか?まあ、それは何も良いことはできません。newdelete[]new[]

于 2012-05-21T13:33:35.957 に答える
3

temp = NULLがあり、次の行でメソッドを呼び出しますか?そして、あなたはそれを削除しようとしますか?


それに加えて、アサーションは「エラー」ではありません。アサーションはデバッグモードであり、特定の条件をアサートしていることを宣言します(これらは、MFCなどのライブラリ全体にも含まれていることがよくあります)。アサーションが失敗した場合は、コードを呼び出して通知し、侵入する機会を与えます。問題をデバッグするためのデバッガー。

于 2012-05-21T13:33:22.873 に答える
0

デバッガーは「アサーション」を実行します。これは、たとえば「ポインタがnullではないことを表明する」のようなコードの正しさの追加チェックです。エラーを見つけるのに役立つので、そうしているのは良いことです。デバッガーによって発行されたメッセージがエラーの原因を見つけるのに役立たないと主張する人には同意します。

于 2012-05-21T13:41:07.060 に答える