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

问题描述 投票:0回答:1

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

将数据从FFT数组(具有特殊的变量类型)传输到普通数组的操作是在调试模式下进行的,但在释放模式下没有进行。在发行版中,我收到以下运行时错误:访问冲突写入位置0x02913000。

从我的Google搜索中,我发现发行版错误通常与未初始化的对象有关。这导致我用0.0明确初始化FTtemp中的每个项目,但是无济于事。此外,我将FFt数组项目打印到控制台,并且出现了数字,这意味着它们也已初始化。因此,我有点想法,想知道是否有人会比我聪明?

这里是我正在谈论的代码段。由于该程序还依赖其他许多内容,因此我还无法完全创建一个最小的示例,但是一旦遇到相同的错误,我将立即添加一个示例。

有趣的事实:我将循环的I&j值打印到控制台以进行故障排除,这是另一个(I,j)提示,每次运行时它都会崩溃:例如: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];
            }
        }

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

c++ arrays runtime access
1个回答
0
投票

此行中有错误:

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

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

[这里可能还有其他问题-也许indexFFT(i, j)给出的索引不好? -但没有看到out的初始化方式或indexFFT的工作方式,我们无法确定。

希望这会有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.