我有一个在二维数组上执行FFT的程序。为了使用快速傅立叶变换库fftw3,我必须使用一个临时数组(称为FTtemp)来读出快速傅立叶变换的结果:它是3d的,因为它包含x&y轴加上每个(x,y)元组的实值和虚值。
从FFT数组(具有特殊变量类型)到普通数组的数据传输在调试模式下工作,但在释放模式下不工作。在发行版中,我得到以下运行时错误:访问冲突写入位置0x02913000。
从我的google搜索中,我发现发布版本的bug通常与未初始化的对象有关。这导致我将FTtemp中的每一项都显式地初始化为0.0,但是没有用。此外,我将FFt数组项打印到控制台,并显示了数字,这意味着它们也已初始化。因此,我有点想不到会不会有人比我更聪明?
下面是我正在讨论的代码片段。因为程序依赖于很多其他东西,所以我还不能重新创建一个最小的例子,但一旦我得到相同的错误,我就会添加一个。
有趣的事实:我将循环的i&j值打印到控制台进行故障排除,这是另一个(I,j) tupel,每次我运行它时它都会崩溃:例如: 49,212或116,169。我真的被这个搞糊涂了。
FTtemp = new double** [width];
for (i = 0; i < width; i++) {
FTtemp[i] = new double*[height];
}
for ( i = 0; i < width; i++)
{
for (j = 0; j < height; j++) {
FTtemp[i][j] = new double[2];
FTtemp[i][j][0] = 0.0;
FTtemp[i][j][1] = 0.0;
}
}
cout << "width,height: " << width << "," << height << endl;
for (i = 0; i < width; i++)
{
for (j = 0; j < height; j++) {
/*
cout << "access to out: " << out[indexFFT(i, j)][0] << endl;
cout << "access to FTtemp: " << FTtemp[i][j][1] << endl;
*/
cout << "i,j is: " << i << "," << j << endl;
FTtemp[i][j][1] = out[indexFFT(i, j)][0]; <--------- error occours here
FTtemp[i][j][2] = out[indexFFT(i, j)][1];
}
}
谢谢你的考虑。万事如意,蓝色
发布于 2020-03-16 03:45:27
这一行有一个错误:
FTtemp[i][j][2] = out[indexFFT(i, j)][1];
注意,在前面的代码中,FTtemp[i][j]
被初始化为new double[2]
,这意味着FTtemp[i][j][2]
是越界写入。
这里可能还有其他问题--也许indexFFT(i, j)
给出了一个糟糕的索引?--但是如果没有看到out
是如何初始化的,或者indexFFT
是如何工作的,我们就不能确定。
希望这能有所帮助!
https://stackoverflow.com/questions/60696881
复制相似问题