ビルドするとエラーはないのですが
実行するとDbug Assetion Failed
とでてしまい実行できません。
そこになにかのエラーがあるのでしょう。
ビルドが通った位で「正しく動くプログラムが完成した」などと思ってはいけません。ビ
ルドエラーとランタイムエラーの両方をクリアしてください。
assertionの内容が示されていないので解決法は提示のしようがありません。
『実行できません』
という言葉は微妙ですね、実行はできています。
実行時に何らかのエラーがあったわけです。
エラーの内容は
Debug Assertion Failed
program:場所
File afxtempl.h
Line:262
For information on how your program can cause Visual C++
documentation on asserts.
です。
おそらく、CArray等を使用する際のセマンティクス的なエラーでしょう。
デバッグ実行し、該当のAssertionで引っかかったところからコールスタックを表示させ、
自分のソースまでさかのぼってロジックをチェックしてください。
> File afxtempl.h
> Line:262
と出てるのですから該当箇所を見てください。
原因がわかると思います。
afxtempl.h 266行目はVC++ 5, 6のいずれも同じ内容でした。
template<class TYPE, class ARG_TYPE>
AFX_INLINE TYPE& CArray<TYPE, ARG_TYPE>::ElementAt(int nIndex)
{ ASSERT(nIndex >= 0 && nIndex < m_nSize);
return m_pData[nIndex]; }
ASSERT()で引っかかっている、ということは「ASSERTが示す条件に合致していない」とい
うことです。あなたはCArray(もしくはCArrayの派生クラス)に対してElementAt()を呼ん
だものの、その引数に与えた数値は、その時点で範囲外だったということです。
まずは、メニューバー > 表示 > デバッグウィンドウ > コールスタックでコールスタッ
クウィンドウを表示させ、どういう関数を経てそこへ行き着いているかを調べます。自分
が作ったコードに辿り着いたら、そこで引数に何を与えているか、そのときにArrayのサ
イズがいくつになっているか、について調べてください。
>デバッグ実行し、該当のAssertionで引っかかったところからコールスタックを表示させ、
>自分のソースまでさかのぼってロジックをチェックしてください。
デバックを実行したんですが次のようなことが表示されたんですが
C:\WINDOWS\SYSTEM\MFCO42D.DLL' のシンボルを読み込みました
'C:\WINDOWS\SYSTEM\USER32.DLL' をロードしました、合致するシンボル情報は見つかりませんで
した。
'C:\WINDOWS\SYSTEM\ADVAPI32.DLL' をロードしました、合致するシンボル情報は見つかりません
でした。
'C:\WINDOWS\SYSTEM\GDI32.DLL' をロードしました、合致するシンボル情報は見つかりませんでし
た。
'C:\WINDOWS\SYSTEM\KERNEL32.DLL' をロードしました、合致するシンボル情報は見つかりません
でした。
'C:\WINDOWS\SYSTEM\MSVCRTD.DLL' のシンボルを読み込みました
'C:\WINDOWS\SYSTEM\MFC42D.DLL' のシンボルを読み込みました
'C:\WINDOWS\SYSTEM\MFC42LOC.DLL' をロードしました、合致するシンボル情報は見つかりません
でした。
'C:\MOUSE\SYSTEM\CCMSGHK.DLL' をロードしました、合致するシンボル情報は見つかりませんでし
た。
'C:\WINDOWS\SYSTEM\IMM32.DLL' をロードしました、合致するシンボル情報は見つかりませんでし
た。
'C:\WINDOWS\SYSTEM\IMEJP98K.DLL' をロードしました、合致するシンボル情報は見つかりません
でした。
'C:\WINDOWS\SYSTEM\COMCTL32.DLL' をロードしました、合致するシンボル情報は見つかりません
でした。
'C:\WINDOWS\SYSTEM\IMEJP98.IME' をロードしました、合致するシンボル情報は見つかりませんで
した。
Detected memory leaks!
<以下省略>
初心者なんでよくわからないのですがおしえてもらえないでしょうか?
メモリリークです。
処理の途中で動的に宣言した変数を開放していますか?
Newなどで宣言している変数を追ってみてください。
それはアウトプットウィンドウ。
ASSERTに引っかかったときに
Press retry to debug the apprication
とかでません?
そのとき再試行を押すと、その状態からデバックできるんで、
そこでtibさんが説明してくれたようにしてみてください
>処理の途中で動的に宣言した変数を開放していますか?
開放というのは変数をどうしてることをいうのでしょうか?
PAIさんが書いてくれた通りにすると
黄色の矢印がでて
{ ASSERT(nIndex >= 0 && nIndex < m_nSize);
return m_pData[nIndex]; }
をさしました。
シンボル名と値のところに
m_nSize 42
+m_pData[nIndex] {x=-842150451 y=-842150451}
nIndex 42
+this 0x00781fa4 {VCPoint::?$CArray}
とでました。
x,yの値がおかしいような気がしますが大丈夫でしょうか?
とりあえずコールスタックを見てはどうでしょう?
(ウィンドウのツールバーあたりで右クリックして
チェックしてやると見れると思います。)
理由がわかりました。
CArray<CPoint,CPoint> m_r; で宣言した
ADDで42個の値を追加していて
for文でまわしていたんですが
for(i=0;i<50;i++){
pDco->m_r[i];
}
としていました。
この50のところを取得することってできるんですか
無理です。
42個なら 0 - 41 の42個しかありません。