簡體   English   中英

發布與調試版本:突然運行時錯誤

[英]Release vs Debug version: suddenly runtime error

我有一個對二維數組執行 FFT 的程序。 為了使用 fft 庫 fftw3,我必須使用一個臨時數組(稱為 FTtemp)來讀出 FFT 的結果:它是 3d,因為它包含 x & y 軸加上每個 (x ,y) 圖佩爾。

從 FFT 數組(具有特殊變量類型)到普通數組的數據傳輸在調試模式下工作,但不在發布模式下工作。 在發布時,我收到以下運行時錯誤:訪問沖突寫入位置 0x02913000。

從我的谷歌搜索中,我發現發布版本的錯誤通常與未初始化的對象有關。 這導致我用 0.0 顯式初始化 FTtemp 中的每個項目,但無濟於事。 此外,我將 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];
            }
        }

謝謝您的考慮。 一切順利,藍

這一行有一個錯誤:

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

請注意, FTtemp[i][j]在您的代碼中較早地被初始化為new double[2] ,這意味着FTtemp[i][j][2]是越界寫入。

這里可能還有其他問題 - 也許indexFFT(i, j)給出的索引不好? - 但是沒有看到out是如何初始化的或indexFFT是如何工作的,我們無法確定。

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM