質問: GetDlgItem(IDC_EDITB); strNo.Format(_T("%d"), *m_pNo); Edit->SetWindowText(strNo); return TRUE; } ``` やりたかったこと -------- ダイアログ間でデータをやりとりしたかった。 ポインタでやりとりすることにより、DialogBで入力した値がDialogAの値に反映されるようにしたかった。
回答: > > ダイアログAから、ダイアログBにint型の値を渡し > > ダイアログBの関数内ではポインタを受け取るようにしました。 > > > C++言語では値がコピーされます。つまり1行目の時点で、ダイアログB側は一時的な領域(スタック)にコピーしています。一時的な領域なため`DialogB::setData`関数を抜け出た段階で領域が開放され再利用されます。ですので2行目の段階でアドレスを取得しポインタとしても既に遅いです。 ダイアログAから、ダイアログBにポインタを渡す必要があります。 一般的なC++言語ではポインタではなく参照を使います。ただし、MFCは参照への対応が不十分なため参照を使用するとかえって混乱するため、MFCと併用される際には無理に参照を使用せず引き続きポインタを使用されることをお勧めします。