お世話になっています、fujitomoと申します。
現在、Visual C++のダイアログベースプログラムを作成しており、
メインダイアログから、各ダイアログ(計7つほど)にメッセージを送信したり、DoModal()で表示するために、メインダイアログのメンバ変数に各ダイアログのインスタンスを定義しました。
Ex)
CSampleAClass A;
CSampleBClass B;
このように、定義し、いざメインダイアログからダイアログを呼び出そうとしたときに以下のようなメッセージのエラーが表示されました。
Unhandled exception at 0x40042c10 in Sample.exe: 0xC00000FD: Stack overflow.
これはWindows CEのみのメッセージかもしれないのですが、たぶん言いたいことはスタックオーバーしてるよ、ということだと思います。
そこで、計7つのダイアログの定義を少なくして、6つにしたところ、上のエラーメッセージはでず、正常にダイアログが表示されました。
次にメンバ変数で各ダイアログのインスタンスを定義するのではなく、そのポインタを定義するようにプログラムを変更してみました。
Ex)
CSampleAClass* A;
CSampleBClass* B;
このようにすると、計7つのダイアログをメンバ変数に定義してもエラーが発生せずに、正常にダイアログを表示させることが出来ました。
この理由はなぜでしょうか?
C言語を始めて時間はたっているのですが、いまだにいまいちインスタンスのオブジェクトとそのポインタでの定義における違いがよく分かっていません。今回のことから、クラスをメンバ変数に定義するときはポインタで定義したほうがいいということなのでしょうか?
ご参考となる意見がございましたら、ご意見宜しくお願い致します。
尚、開発環境は
Windows CE 6.0
Visual Studio 2005
です。
宜しくお願い致します。
No.1ベストアンサー
- 回答日時:
CSampleAClass A;
だとスタックに
CSampleAClass* A = new CSampleAClass();
だとヒープに
オブジェクトが作成されるからでしょう。
前者の場合、単純に6つのダイアログ作成がスタックの限界だったんだと思いますよ。
リンカのオプションでスタックサイズを変えることができるので、増やしてビルドしなおせば、元のコードでも7つのダイアログを扱うことができるはずです。
prophetok様、御回答ありがとうございます。
スタック、ヒープの違いがあったんですね。教えていただいてありがとう
ございました。
教えて頂いたとおり、リンカのオプションを見てみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- その他(Microsoft Office) Office(Windows版,Word/Excel/PowerPoint等)にログインできません 4 2022/07/24 15:18
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
- Visual Basic(VBA) VBAでファイルを開くプログラムがエラーです 2 2023/02/21 16:56
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
- Windows 10 MSアカウントの「個人設定をクラウドから削除します」は機能していないのでしょうか? 1 2022/11/20 17:01
- Visual Basic(VBA) シートをコピーする下記記述でダイアログを用いた記述がわかりません?( A = Dir(ThisWor 4 2022/08/22 12:26
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
printf / sprintf のスタック消...
-
スタックの伸張方向
-
VB.netでDLLを読み込んで実行す...
-
最大スタックサイズを大きくす...
-
ライン数とステップ数の違いに...
-
パソコンでインターネット接続...
-
プログラムの規模を表す単位「k...
-
ubuntuで デイスク/deb/loopと...
-
MoveNextの処理速度は?
-
ブロック長について
-
ネットワークアイコンが黄色三...
-
Octaveでのオイラー法とルンゲ...
-
VB6.0で #の意味
-
ステップ数について
-
昔したタイピングソフトが思い...
-
ミキサの原理
-
hdmiはパラレル?シリアル?
-
サブネットマスクが255.255.255...
-
[ASP]If~Else If~End If 対 Case
-
【電気】フリッカー回路ってな...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ゆゆにゃ。
-
エラー?メッセージ
-
VB.netでDLLを読み込んで実行す...
-
printf / sprintf のスタック消...
-
スタック領域変更
-
関数のプロローグとエピローグ...
-
スタックフレームの消滅
-
逆ポーランド記法
-
マス目上の移動のアルゴリズム
-
_CRTIMPの意味は?
-
gccでスタックサイズを変更する...
-
再帰処理を非再帰処理に書き換...
-
最大スタックサイズを大きくす...
-
C言語・スタックを使用した逆...
-
C言語のリスト、スタック、キュ...
-
C言語での配列初期化について
-
情報処理の問題で理解ができま...
-
objective-c undo機能について
-
基本情報技術者のデータ構造あ...
-
再帰関数を使うとき、ソフトウ...
おすすめ情報