

必要に応じて拡張した配列の要素を全削除します。
CTEST *p;
Break-> for(i = 0; i < this->GetSize();; i++) {
p = (CTEST*)this->GetAt(i);
delete p;
p = NULL;
}
this->RemoveAll();
以上の様にしてみたのですが、デバックモードで削除を実行すると最後まで実行されずに?混合モードになります。
これはなにか悪い事でもしでかしているのでしょうか?
できましたら、今回に限らずステップ実行から混合モードへ移ってします理由を教えていただけるとありがたいです。
No.2ベストアンサー
- 回答日時:
> 一旦勝手にブレイクするのは何故?
ソースを適当に修正して実行してみましたが、私の環境(Win2000,VC++6.0sp?)だと再現しませんでした。
「ブレークポイントの設定位置 0x????」で止まるってのはあまり経験ないですが、「ブレークポイントの設定位置」のキーワードで情報収集すると、デバッグ中にそういう事が起こる例はあるようです。
メモリ破壊でブレークポイントの情報が壊れるってのも考え難いですね。
別の方向から、チェックする項目を上げてみると…
1)
[編集]-[ブレークポイント]でブレークポイントが設定されていないか確認。
データの変化やメッセージを受け取った際にブレークする場合もあるので、そちらも確認。
[すべて削除]で一旦削除してみる。
2)
ブレークした状態で、
[表示]-[デバッグウインドウ]-[コールスタック]を表示し、該当処理を呼び出した処理は?そのときの引数は?そのまた呼び出し元は?と辿ってみる。
--
> デバッグ情報が無いというのはどういう事ですか?
私の環境の例ですが、いきなり[デバッグ]-[ステップイン]を実行すると、
int WINAPI _tWinMain(…)
の関数(Cの場合はmain関数など)が呼び出されます。
インストールの際の設定によりますが、_tWinMain関数の定義されている"appmodul.cpp"ファイルが無い場合や、ソースファイルがあってもexeとcppを関連付けているデバッグ情報が無い場合、プログラムの開始位置で止まっている状況を表示しなければならないが、ソースが分からないという事で、混合モードが表示されます。
動的にリンクしたライブラリの関数(ソースなし)にステップイン、printf関数にステップイン、などすると設定次第ですが混合モードが表示されるハズです。
>動的にリンクしたライブラリの関数(ソースなし)にステップイン、printf関数にステップイン、などすると設定次第ですが混合モードが表示されるハズです
回答ありがとうございました。なんとなく聞いた覚えがあるような・・・、って程度の認識しかありませんでした。
No.1
- 回答日時:
CTESTの宣言、該当処理のクラス宣言、関数宣言、など提示してもらわないと、なんとも…。
エラーメッセージなどは表示されないのですか?
--
class CTEST
{};
class CTESTary : public CObArray
{public:void doo();};
void CTESTary::doo()
{該当処理}
void CTest1211Dlg::OnButton1() // 適当なダイアログ
{CTESTary a;a.doo();}
のようにすると、普通に実行されているようでしたが。
--
> ステップ実行から混合モードへ移ってします理由を教えていただけるとありがたいです。
基本的にはデバッグ情報が無い場合です。
この回答への補足
説明不足で申し訳ありません。
class CTEST : public CObArray
{
public:
void Set(const AAA *);
const AAA *Get(int);
void Erase(void);
private:
void Sort(int(*Comp)(CObject *, CObject *),int, int);
};
void CTEST::Set(const AAA *p)
{
AAA *c = new AAA;
*c = *p);
Add((CObject*)c);
Sort(Comp, 0, GetUpperBound());
}
const AAA* CTEST::Get(int i)
{
return((AAA*)GetAt(i));
}
void CTEST::Erase(void)
{
int i;
AAA *p;
for (i = 0; i < GetSize(); i++) {
p = (AAA*)GetAt(i);
delete p;
p = NULL;
}
RemoveAll();
}
CTEST::Sort(Comp, 0, GetUpperBound())
{
// 再帰ソート(省略)
}
AAAというのは自身で用意したクラスで情報群メンバに持ち、メンバ関数で個々の情報を取り出すクラスです。
自分ではソート処理でアドレスを壊してるのかなぁと推測してEraseでダンプしてみたんですが、別におかしくない様に思えました。
最後まで実行されずにというのはEraseで確保した領域を開放していく過程で混合モードに入りメッセージボックスでブレイクポイントの設定位置 アドレスと表示されるということです。一旦勝手にブレイクするのは何故?というのが私の知りたい事です。ちなみにF5で再実行すると何も無かったように正常に終了します。
以上補足したつもりですが、お願いします。
>基本的にはデバッグ情報が無い場合
特に設定をいじらずプロジェクトを作ったつもりですが、デバッグ情報が無いというのはどういう事ですか?聞いてばっかりですみません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
visual studio2019でデバッグが...
-
ブレークポイントは現在の設定...
-
eclipseでデバックするとエラー...
-
Eclipseのブレークポイントが○...
-
デバッガでステップ実行してい...
-
Visual Studio 2010 のC#で…
-
RichTextBox使用で...
-
ソリューションをまたがるデバ...
-
Visual studio2017で、2回目の...
-
DLL参照時に指定されたモジュー...
-
C#、C++間のDLLの呼び出しについて
-
VB6 ClassにてEnum(列挙型)の...
-
#ifdef _DEBUGが効かない
-
Eclipseのデバッグ時にブレーク...
-
デバッグとビルドは何が違うの...
-
Visual C#で、usingが出来ない...
-
eclipseでプログラムが実行でき...
-
VB2008:プロジェクト参照で名...
-
VC++でSQL Serverに接続するに...
-
Visual StudioのF5一発で、変更...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Eclipseのブレークポイントが○...
-
visual studio2019でデバッグが...
-
デバッグとビルドは何が違うの...
-
eclipseでデバックするとエラー...
-
DLL参照時に指定されたモジュー...
-
起動時に何のダイアログも表示...
-
Visual studio2017で、2回目の...
-
VB6のデバッガ?強制終了?につ...
-
visual studio 2008 のデバッグ...
-
eclipseでプログラムが実行でき...
-
VB.netを実行するとデバック プ...
-
C#、C++間のDLLの呼び出しについて
-
C言語での開発でエラーが出て困...
-
VC++でSQL Serverに接続するに...
-
デバッガでステップ実行してい...
-
vb ver6 でformat文やTrim文の...
-
ブレークポイントは現在の設定...
-
vbprojファイルが開けません
-
VC++でDeugモードOKで、Release...
-
「カレントフォルダ以外にある...
おすすめ情報