[英]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.