我在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++。 –