- 締切済み
ベクターの中のベクターの呼び出し
お世話になります。 下記のように a.h に書いた他のクラスで宣言したベクターのベクター の変数を参照すると一部がうまく取り出せません。 うまく取り出せないとは、値が変わっています。0になっていたり 桁数が増えて違う数字になっていたりします。 具体的には、 vector<vector<RECT_TABLE>> vv = setteiDlg->m_rectlist; for(int i=0 ; i < ninList ; ++i) { suu = vv.at(i).at(0).suu; (1) range.left = vv.at(i).at(0).left; (2) range.right = vv.at(i).at(0).right; (3) range.top = vv.at(i).at(0).top; (4) range.bottom = vv.at(i).at(0).bottom (5) : で、(1)と(2)が0であったり、7,8ケタの数字(実際は2ケタ)に代わって取り出されます。後は、OKです。 取り出されるとは、setteiDlg->m_rectlist の中を見ると正しい数字です。 vv = setteiDlg->m_rectlist; として転記した後、vv が正しくないようです。 vv は、別のビューヘッダーに下記のように書いてます。 class CYomiView : public CScrollView { protected: // シリアル化からのみ作成します。 CYomiView(); vector<vector<RECT_TABLE>> vv; : a.h というヘッダーに記述 class RECT_TABLE { public: int left, top, right, bottom, suu; RECT_TABLE(int ............. : } class Settei : public CDialog { : vector<vector<RECT_TABLE>> m_rectlist; a.h はここまで 教えてください。お願いします。 Windows 7/Vista VS2005 VC++ MFC
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- ICE_FALCON
- ベストアンサー率56% (63/111)
#1です。 >> 他のソースでバッファオーバランでもしてるんじゃないかと思いますが・ > とは、どういう意味でしょうか? バッファオーバーラン、そのままの意味ですが、 要するに、わけがわからない状態なので、 他のソースコードでバッファオーバーランを起こしていて わけのわからない状態になっているのでは?ということです。 わけのわからない状態になったときに疑うのが、バッファオーバーランです。 int a[10] と宣言しているのに a[10]=1 したときの状態がバッファオーバーランです。 何が起こるかわかりません。 あと考えられるのはRECT_TABLEのコピーコンストラクタが変とかかな?
- ICE_FALCON
- ベストアンサー率56% (63/111)
質問者さんの問題の部分を簡単に書くと vector<vector<RECT_TABLE>> v; vを適当に初期化 vector<vector<RECT_TABLE>> vv=v; でこのときvvとvの中身が違いますってことですか? 普通に考えると、他のソースでバッファオーバランでもしてるんじゃないかと思いますが・・・。
補足
お世話になります > vector<vector<RECT_TABLE>> vv=v; > でこのときvvとvの中身が違いますってことですか? そうです。 > 他のソースでバッファオーバランでもしてるんじゃないかと思いますが・ とは、どういう意味でしょうか?