前尺寸的局部定義我想定義的3維向量,其中頭兩個尺寸是固定的,但我想第三個要由動態填入函數在循環內調用。3維矢量 - 傳遞給功能
我不能完全肯定這是否是允許或沒有,但我試圖用類似反正實現:
#define NUM 6
vector<vector<vector<double> > > foo;
foo.resize(NUM);
for(int j1=0; j1 < NUM; j1++){
foo[j1].resize(NUM);
}
while(<condition>){
fun(foo);
}
在這裏我聲明函數fun的
void fun(vector<vector<vector<double> > >& foo){
for(int j1=0; j1<NUM; j1++){
for(int j2=j1+1; j2<NUM; j2++){
if(<condition>){
foo[j1][j2].push_back(<value>);
}
}
}
}
我最初測試NUM等於5,一切看起來都很好,但是當我嘗試將其更改爲6時,我遇到了分段錯誤。
我已經看到,即使我沒有嘗試用push_back填充第三維(即我註釋了push_back行),但對foo作爲參數的函數的簡單調用會混淆FOO,那就是如果我插入
cout << foo.size() << endl;
while循環
,我看到的第一次迭代後富的變化,尺寸從NUM改變到一個隨機數。
我還發現,這是平臺相關的,因爲我得到的Linux操作系統Ubuntu的錯誤,而不是MacOSX上。所以我想我正在做一些與內存分配有關的錯誤,但我不知道具體是什麼。有人可以向我解釋這一點嗎?
謝謝你的幫助!
如果你註釋掉整個循環並試圖從'fun'執行'cout << foo.size()',會發生什麼?另外,您可以在調用函數中發佈'while()'中使用的確切條件嗎?並且已經從'5'改變NUM後重新編譯一切'6'(即一些代碼沒有使用'NUM'作爲'5'和一些其他的代碼使用'NUM'作爲編譯編譯'6'吧?) –
Naveen
你有問題存在的簡單獨立案例?你的代碼是(除了'fun'中的內循環 - 我認爲這是故意的)看起來沒問題。 – Nim
此代碼應該在發佈時有效。您必須發佈SSCCE。 – Puppy