我有一些 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 都不一样,这让我相信内存中发生了一些奇怪的事情。