デバックエラー – プログラミング – Home

通知
すべてクリア

デバックエラー

固定ページ 1 / 2

ゴン太
 ゴン太
(@ゴン太)
ゲスト
結合: 24年前
投稿: 18
Topic starter  

ビルドするとエラーはないのですが
実行するとDbug Assetion Failed
とでてしまい実行できません。


引用解決済
トピックタグ
tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
 

そこになにかのエラーがあるのでしょう。

ビルドが通った位で「正しく動くプログラムが完成した」などと思ってはいけません。ビ
ルドエラーとランタイムエラーの両方をクリアしてください。

assertionの内容が示されていないので解決法は提示のしようがありません。


返信引用
PAI
 PAI
(@PAI)
ゲスト
結合: 23年前
投稿: 359
 

『実行できません』
という言葉は微妙ですね、実行はできています。

実行時に何らかのエラーがあったわけです。


返信引用
ゴン太
 ゴン太
(@ゴン太)
ゲスト
結合: 24年前
投稿: 18
Topic starter  

エラーの内容は

Debug Assertion Failed

program:場所
File afxtempl.h
Line:262

For information on how your program can cause Visual C++
documentation on asserts.

です。


返信引用
PAI
 PAI
(@PAI)
ゲスト
結合: 23年前
投稿: 359
 

おそらく、CArray等を使用する際のセマンティクス的なエラーでしょう。
デバッグ実行し、該当のAssertionで引っかかったところからコールスタックを表示させ、
自分のソースまでさかのぼってロジックをチェックしてください。


返信引用
いぷ
 いぷ
(@いぷ)
ゲスト
結合: 22年前
投稿: 6
 

> File afxtempl.h
> Line:262

と出てるのですから該当箇所を見てください。
原因がわかると思います。


返信引用
tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
 

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のサ
イズがいくつになっているか、について調べてください。


返信引用
ゴン太
 ゴン太
(@ゴン太)
ゲスト
結合: 24年前
投稿: 18
Topic starter  

>デバッグ実行し、該当の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!
<以下省略>
初心者なんでよくわからないのですがおしえてもらえないでしょうか?


返信引用
メモリ
 メモリ
(@メモリ)
ゲスト
結合: 22年前
投稿: 7
 

メモリリークです。
処理の途中で動的に宣言した変数を開放していますか?
Newなどで宣言している変数を追ってみてください。


返信引用
PAI
 PAI
(@PAI)
ゲスト
結合: 23年前
投稿: 359
 

それはアウトプットウィンドウ。

ASSERTに引っかかったときに
Press retry to debug the apprication
とかでません?

そのとき再試行を押すと、その状態からデバックできるんで、
そこでtibさんが説明してくれたようにしてみてください


返信引用
ゴン太
 ゴン太
(@ゴン太)
ゲスト
結合: 24年前
投稿: 18
Topic starter  

>処理の途中で動的に宣言した変数を開放していますか?
開放というのは変数をどうしてることをいうのでしょうか?


返信引用
ゴン太
 ゴン太
(@ゴン太)
ゲスト
結合: 24年前
投稿: 18
Topic starter  

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}
とでました。


返信引用
euro2004
 euro2004
(@euro2004)
ゲスト
結合: 22年前
投稿: 37
 

x,yの値がおかしいような気がしますが大丈夫でしょうか?
とりあえずコールスタックを見てはどうでしょう?
(ウィンドウのツールバーあたりで右クリックして
チェックしてやると見れると思います。)


返信引用
ゴン太
 ゴン太
(@ゴン太)
ゲスト
結合: 24年前
投稿: 18
Topic starter  

理由がわかりました。
CArray<CPoint,CPoint> m_r; で宣言した
ADDで42個の値を追加していて
for文でまわしていたんですが
for(i=0;i<50;i++){
pDco->m_r[i];
}
としていました。

この50のところを取得することってできるんですか


返信引用
PAI
 PAI
(@PAI)
ゲスト
結合: 23年前
投稿: 359
 

無理です。
42個なら 0 - 41 の42個しかありません。


返信引用
固定ページ 1 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました