我有一些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分。没有其他更改,仅此打印语句。我对为什么甚至如何改变输出感到困惑。任何帮助将不胜感激。

编辑:好的,所以实际上,它只是随机的。每次运行它时,变量n都是不同的,这使我相信内存中正在发生奇怪的事情。

最佳答案

该行存在一个重大问题:

return poi;

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

由于这是C++,并且您需要一个动态数组,因此建议您使用std::vector。它解决了诸如此类的许多问题。

关于c++ - 打印语句更改功能的输出?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17576916/

10-11 18:33