2012-07-12 146 views
2

我正在嘗試重新編譯一個使用fftw3(版本3.2.2)並且已經在32位Linux機器上運行的程序。它在64位機器上正確編譯 - 我鏈接到64位fftw庫 - 但在嘗試fftw_malloc時程序出現段錯誤。下面是使用的代碼:64位linux機器上的`fftw_malloc'segfault

//the variables on the right side are already initialized to nonzero values 
int olsLen = blockLen + tempLen - 1; 
int num_chans = 23; 

fftw_complex *gabor_filter, *block_signal, *ols_out; 

gabor_filter = (fftw_complex *) fftw_malloc(olsLen 
              * num_chans 
              * sizeof(fftw_complex)); 

block_signal = (fftw_complex *) fftw_malloc(olsLen 
              * num_chans 
              * sizeof(fftw_complex)); 

ols_out = (fftw_complex *) fftw_malloc(olsLen 
             * num_chans 
             * sizeof(fftw_complex)); 

這似乎是這個問題應該是顯而易見找到,但我太愚蠢看到我的錯誤的時刻。有任何想法嗎?

編輯:它在第一個fftw_malloc segfaults。在這種情況下,它是gabor_filter,但是如果我重新排序變量,程序將在第一個fftw_malloc上進行段錯誤。

+0

fftw_malloc調用程序段錯誤?看起來像一個愚蠢的問題,因爲每個電話都是一樣的。 – ctor 2012-07-12 18:56:40

+0

忘了提及。它會在gabor_filter上進行段錯誤,但是如果對變量進行重新排序,則無論是第一個段錯誤(即,當block_signal是第一個,這將會出現段錯誤) – user1521731 2012-07-12 19:13:13

+0

您可以嘗試['fftw_complex * fftw_alloc_complex(size_t n);'](http:// www。 fftw.org/doc/Memory-Allocation.html),看看會發生什麼?這是分配複合物的便利功能。只是想知道當時會發生什麼。 – ArjunShankar 2012-07-12 19:20:41

回答

0

看起來你需要升級到3.3.3。我不知道爲什麼你的設置不工作,但fftw_alloc_complex()沒有加入到3.3-β1:

New convenience functions fftw_alloc_real and fftw_alloc_complex to use fftw_malloc for real and complex arrays without typecasts or sizeof.

FFTW 3 release notes

升級之後,這是否依然發生? (你原來的問題或對@ArjunShankar評論的回覆)