gpt4 book ai didi

c++ - 打印语句改变函数的输出?

转载 作者:行者123 更新时间:2023-11-30 04:16:45 27 4
gpt4 key购买 nike

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

最佳答案

线路有严重问题:

return poi;

这将返回一个本地 对象的地址。当数组在函数结束时超出范围时,数组将不再存在。精彩解释见:Can a local variable's memory be accessed outside its scope? .

因为这是 C++ 而你想要一个动态数组,我建议你使用 std::vector。它解决了许多诸如此类的问题。

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com