打印语句改变功能的输出?

时间:2013-07-10 17:16:47

标签: c++ cout

我有一些c ++代码,它应该查看函数的导数并收集斜率大于某个阈值的点。它一直给我带来麻烦,所以我一直在各处打印报表来弄清楚出了什么问题。我偶然发现了一个令人困惑的问题,当我使用std :: cout<<要打印一个数组的大小,它改变了函数的输出!这是代码片段:

int* Tools::findPoi(float* y, int size, float threshold, int width, float step, int* outsize){
int poi[size];
float* derive = derivative(smooth(y,size,width),size, step);
int n = 0;
std::cout<<size<<" data size\n";
for(int i = 0; i<size; i++) {
    if(derive[i] > threshold) {
        poi[n] = i;
        n++;
    }
}

*outsize = n-1;
return poi;
}

没有注释掉的行“std :: count ...”我得到82 poi。但如果我发表评论或删除它,我会得到84 poi。没有其他任何改变,只有这个打印声明。我很困惑为什么甚至如何改变输出。任何帮助将不胜感激。

编辑:好的,实际上,它只是随机的。每次运行变量n都是不同的,这让我相信内存中会发生一些奇怪的事情。

1 个答案:

答案 0 :(得分:2)

该行存在严重问题:

return poi;

返回本地对象的地址。当函数在函数末尾超出范围时,该数组不再存在。有关精彩的解释,请参阅:Can a local variable's memory be accessed outside its scope?

由于这是C++并且你想要一个动态数组,我建议你使用std::vector。它解决了很多这样的问题。