一點背景,我對Java更有經驗,並且有一些C/C++的經驗。
我正在使用Visual Studios 2010.傅立葉變換計劃中的訪問衝突
我在頭文件中創建了兩個類,併爲它們提供了字段。
它編譯好,並且運行時間最長,運行得很好。
我將整個項目目錄複製到一個新文件夾(裏面的所有文件),並重新編譯並運行它。現在每當我運行它時,我都會在RegistrationExpLib2.exe的0x637779ab處得到「未處理的異常:0xC0000005:訪問衝突寫入位置0x00000000」。在這一行
FourierTrans[i] = fftwf_plan_dft_2d(imgRows, imgCols, in[i], out[i], FFTW_FORWARD, FFTW_MEASURE);
我檢查了調試器,所有的類字段返回無法評估表達式。
我已經檢查並正確讀取圖像。據我所知,所有的內存都已正確分配。 fftw3是我鏈接的C DLL。
所以我很困惑,希望有人能指出一個可能的問題。我也在想,當我複製Visual Studios項目時(即使我沒有改變任何東西,因爲它正在工作),或者我在標題中錯誤地分配了內存,我在設置時出現了錯誤。我想到的另一個問題是每個圖像大約20MB,所以我可能會搞亂堆。 我真的很感激任何幫助。
正在閱讀的圖像通常是每個10-20MB一張。該代碼被編譯爲32位二進制文件。
這是產生崩潰的代碼的相關簡化部分。
#define TESTNUM 80
//A simple test main.
int main() {
ComplexImageFFTW a;
ComplexImageFFTW b[TESTNUM];
ComplexImageFFTW* ptrB;
ptrB = b;
printf("start\n");
a.readImage("imagefile1", true);
printf("Mission\n");
for(int i = 0; i < TESTNUM; i++) {
b[i].readImage("imagefile2", true);
}
//Crash occurs here.
FourierTrans[i] = fftwf_plan_dft_2d(imgRows, imgCols, in[i], out[i], FFTW_FORWARD, FFTW_MEASURE);
...
} //End main
爲什麼不在發佈之前減少此代碼? – Beta
你能提供一個仍然崩潰的*最小*代碼示例嗎? –
檢查你的指針。至少有一個是NULL,它不應該在那裏。 –