映画のエンドロール観る派?観ない派?

リリースビルドでは問題なく実行されるのですが、
デバッグビルドでは、途中でプログラムが強制終了されてしまいます。

Debug Error!
Program:D:~~.exe
DAMAGE:after Normal Block(#*****) at 0x********.
このような警告ウィンドウが出ます。

デバッグしてみるとwhile文中で突然変数の値が突然変わっているように見えるのですが…
(特に64,320等の値になるようです)


DBGHEAP.C というファイルの

/* if we didn't already check entire heap, at least check this object */

if (!(_crtDbgFlag & _CRTDBG_CHECK_ALWAYS_DF))
{
/* check no-mans-land gaps */
if (!CheckBytes(pHead->gap, _bNoMansLandFill, nNoMansLandSize))
_RPT3(_CRT_ERROR, "DAMAGE: before %hs block (#%d) at 0x%08X.\n",
szBlockUseName[_BLOCK_TYPE(pHead->nBlockUse)],
pHead->lRequest,
(BYTE *) pbData(pHead));

if (!CheckBytes(pbData(pHead) + pHead->nDataSize, _bNoMansLandFill, nNoMansLandSize))
_RPT3(_CRT_ERROR, "DAMAGE: after %hs block (#%d) at 0x%08X.\n",
szBlockUseName[_BLOCK_TYPE(pHead->nBlockUse)],
pHead->lRequest,
→→→ (BYTE *) pbData(pHead));
}

の →→→ の部分で引っかかっているようです。
vector<(クラス名)>を使っているのですが、関係あるのでしょうか?
素人な質問で申し訳ありません。よろしくお願いします。

A 回答 (1件)

プログラムの予想も付かない場所で、ポインタ操作を間違って壊している可能性が強いです。

リリースビルドでたまたま正常に動いているように見えても、どこかで変な動作をしているでしょう。
Visual Studioには、指定したアドレスの内容が書き換えられたらそこでブレークする、という機能があります。この機能を使って(動作速度が桁違いに遅くなるのは難ですが)、実行してみてください。
    • good
    • 0
この回答へのお礼

デバッグできました。
わざわざ回答ありがとうございました。

お礼日時:2004/07/10 22:24

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