お世話になります。学習用にサンプルソースを作ってまして、
デバッグで詰まってます。どなたかアドバイス下さい。
class BBB;
class AAA{
public:
AAA();
~AAA();
void Func01();
void Func02();
BBB* GetBBB();
int bbb;
private:
int aaa;
BBB* bbb_;
};
class BBB {....};
AAA::AAA(){
aaa = 123;
bbb = 456;
}
ひとまずこんな感じのクラスを作り、main関数で
void main()
{
AAA *test01 = new AAA();
AAA test02;
test02.bbb = 1 // ☆
cout << bbb: << test02.bbb << endl;
(以下略)
}
☆でブレークを張って確認したのですがtest01は、new AAA()としているのにも
関わらず、VC上のウォッチで確認すると「シンボルが見つかりません」と表示
されます。(test01にメモリが割り当てられていないと言う解釈?)
また実体を宣言してるtest02の方は確認すると何故かaaaにもbbbにも
値が格納されてなく不定値が入っています。期待値はaaa=123、bbb=456ですよね?
その後ステップ実行すると、何故かtest02.aaaに1が格納されてしまうのですが、
しかしコンソールには正しくbbb:1と表示されます。
省略はしましたがこの後も、Func01()やFunc02()をコールする処理はあるのですが、
期待する結果を得られています。
今までVC6.0を使っており、今更ながらVC2005を使い始めたのですが、単純なC++の
コーディングなので、別段違いを意識しないで使っています。
(気をつけるのは文字列の扱いぐらいでしょうか?)
実はメモリの使い方(?)やら特別な扱いや設定で問題があるのでしょうか?
環境は、WinXP(SP2)+VC2005(SP1)で、Win32コンソールアプリで作ってます。
よろしくお願いします。
今、2005はアンインストールしたので確認できませんが、
> 実はメモリの使い方(?)やら特別な扱いや設定で問題があるのでしょうか?
このようなことはなかったと思います。
掲載されたコードをコンパイルできるように最小限手直しして、
2003で試したところ再現しませんでした。
めるさんの勘違いのため、省略した処理が影響をあたえているかもしれませんので、
その可能性をつぶすために、includeも含め、最小限の再現するコードを
書いてみてはどうでしょうか。
そのとき省略した処理が再現に不要ならば完全に削除し、
そのままコンパイルできる状態にしてください。
たいちうさんありがとうございます。
別のプロジェクトにコピーして清書(?)して
やると上手く動いたので、ソースの問題ではないと思い、
元々のプロジェクトの設定を良く見直したところ、
構成マネージャーがReleaseになっていました。
毎回ソースを修正してビルドしていたのはReleaseビルドで、
デバッグしていたのは更新されていないDebugビルドのもので
やっていたからなのかなぁ?と・・・
Debugに戻してやってみたところ、元のソースでもちゃんと
アドレス割り当たりました。
ブレークポイントも張れたり張れなかったりでしたので、
腑には落ちなかったのですが・・・。
くだらない凡ミスですいません。
お手数お掛けしました。ありがとうございます。