2

fftw3 (バージョン 3.2.2) を使用し、32 ビット Linux マシンで既に実行されているプログラムを再コンパイルしようとしています。64ビットマシンで正しくコンパイルされます-そして私は64ビットfftwライブラリにリンクしました-しかし、プログラムを実行しようとするとセグメンテーション違反が発生しfftw_mallocます. 以下は、使用されるコードです。

//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 でセグメンテーション違反が発生します。この場合は gabor_filter ですが、変数を並べ替えると、プログラムは最初の fftw_malloc で segfault します。

4

1 に答える 1

0

3.3.3 にアップグレードする必要があるようです。セットアップが機能しない理由はわかりませんが、fftw_alloc_complex() は 3.3-beta1 まで追加されませんでした:

新しい便利な関数 fftw_alloc_real および fftw_alloc_complex は、型キャストまたは sizeof なしで実数および複素数の配列に fftw_malloc を使用します。

FFTW 3 リリースノート

アップグレードした後も、この問題は引き続き発生しますか? (元の質問または @ArjunShankar のコメントへの応答のいずれか)

于 2013-04-29T17:45:33.350 に答える