我在C++上做了一些模擬,並且遇到了一個奇怪的問題。我有以下函數返回的雙重載體:未定義的行爲
vector<double> processSimulation(int Q){
//do things
vector<double> output;
output.push_back(mean);
output.push_back(variance);
return output;
}
在主,我有以下幾點:
//define Q
vector<double>::iterator it = processSimulation(Q).begin();
double mean = *it;
double variance = *(it+1);
的問題是,我得到一個錯誤的號碼的平均值(的東西e-305)和方差的正確編號。 我試圖自己解釋這種行爲,我認爲這可能是由於迭代器指向函數中的舊向量,現在超出範圍並且不再存在,因此可能是由於未定義的行爲引起的和。我對麼? 也許我只是幸運,方差是正確的,因爲它也可能是錯的。
我改變了代碼
vector<double> output = processSimulation(Q);
vector<double>::iterator it = output.begin();
//same as before
,它工作得很好,所以這增強了我的hypotesis。
而且我注意到一個調試怪事:試圖弄清楚發生了什麼事(固定代碼之前)的時候,我看着均值和方差的調試通過的價值觀和他們都錯了。但是,當我運行程序時,只有意思是錯誤的(我已經嘗試了很多次,而且總是這樣:調試時都是錯誤的,在運行時意味着錯誤和方差是正確的)。 這裏發生了什麼?
的Java問題:好,這個問題我已經見過,真是煩我,因爲經常在Java中,縮短的事情,我沒有直接上,將返回該函數定義新的對象,但使用的方法對象(如本例中)。雖然,我從來沒有遇到任何問題。我一直在做事情無意中(幸運的是)?或者僅僅是在Java中沒有這樣的行爲存在,因爲應該返回對象的函數實際上返回指向它們的指針,而真正的對象總是在堆中(並且在沒有引用它們時被垃圾回收)?
希望你能澄清我的疑惑!
請添加'// do things'代碼。我猜測你沒有正確地初始化一些東西。 –
無論如何,你爲什麼要返回'vector',而不是使用輸出參數表示均值和方差? –
@AndyTurner這不會是更好的C++。 –