发布版本与调试版本:突然出现运行时错误



我有一个程序,可以在2d数组上执行FFT。为了使用fft库fftw3,我必须使用一个临时数组(称为FTtemp(来读取fft的结果:它是3d,因为它包含x&y轴加上每个(x,y(元组的实数和虚数。

从FFT阵列(具有特殊变量类型(到普通阵列的数据传输是在调试模式下进行的,但不是在发布模式下。在发行版中,我得到以下运行时错误:写入位置0x02913000的访问冲突。

从我的谷歌搜索中,我发现发布版本的错误通常与未初始化的对象有关。这导致我用0.0显式地初始化FTtemp中的每个项目,但没有用。此外,我将FFt数组项打印到控制台,并显示数字,这意味着它们也已初始化。因此,我有点没有想法,想知道是否有人比我更聪明?

这是我正在谈论的代码片段。由于这个程序依赖于很多其他东西,我还不能重新创建一个最小的例子,但一旦出现同样的错误,我就会添加一个。

有趣的事实:我打印的I&循环的j值到控制台进行故障排除,它是另一个(I,j(元组,每次运行时都会崩溃:例如:49212或116169。我真的很困惑。

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];
}
}

感谢您的考虑。祝你一切顺利,蓝色

此行中有一个错误:

FTtemp[i][j][2] = out[indexFFT(i, j)][1];

请注意,FTtemp[i][j]在代码的前面被初始化为new double[2],这意味着FTtemp[i][j][2]是一个越界写入。

这里可能还有其他问题-也许indexFFT(i, j)给出了一个糟糕的索引?-但如果不了解CCD_ 5是如何初始化的,或者CCD_。

希望这能有所帮助!

最新更新