2017-11-09 18 views
0

fftwライブラリ(link to FFTW documentation)を使用してDFTを実装しようとしています。fftwライブラリを使用中にC++コードが実行されない

すべてのライブラリが正しくリンクされており、プロジェクトはうまく構築されています。ただし、fftwライブラリの関数が呼び出された時点でコードは実行されません。

#include <iostream> 
#include <fftw3.h> 

using namespace std; 

int main() { 

    int vectorSize = 100; 
    cout << vectorSize << endl; 

    fftw_complex vec[vectorSize], vecOut[vectorSize]; 

    for(int i = 0; i < vectorSize; i++) { 
     vec[i][0] = i; 
     vec[i][1] = 1; 
    } 

    // Call to function to create an FFT plan 
    fftw_plan plan = fftw_plan_dft_1d(vectorSize, vec, vecOut, FFTW_FORWARD, FFTW_ESTIMATE); 

    cout << "test" << endl; 

    return 0; 
} 

fftw_planがインスタンス化される行をコメントすると、コードは100と "test"を期待どおりに出力します。ビルドには問題はありませんが、私が知る限りです。私は実際に同様の問題を記述した投稿を見つけることはできませんでした。

私は、MinGWと32ビット版のプリコンパイルされたバイナリをウィンドウ(download link)で使用して、Eclipseで実行しています。

すべてのヘルプは本当にいただければ幸いです:)

+0

デバッガで_Pause_を押すとどうなりますか?コードがまだ実行中か、 'fftw_plan_dft_1d'の呼び出しでクラッシュしますか?他のfftw呼び出しを試しましたか、もっと簡単な呼び出しをしましたか? [私が見つけた]ドキュメント(http://www.fftw.org/fftw3_doc/Complex-One_002dDimensional-DFTs.html)は 'fftw_malloc'への呼び出しを示唆しているので、' fftw_complex'をスタックに作成するかどうかはわかりません問題を引き起こすかどうか。私はそれが動作するかどうかを確認する簡単な関数呼び出しを試みることをお勧めします。 – Tas

+0

デバッガは終了して終了し、決まったブレークポイントに到達しません。 –

+0

コードを再実行するだけで、コード自体が「クラッシュ」することはありません。それは何も出力しません、私はそれがバックグラウンドで動作しているかどうかわかりません(私の推測は、エラーがないためです) –

答えて

0

FFTW 16バイトを整列させるために、入力/出力が必要です。スタック上に配列を宣言すると、これは保証されません。したがって、配列を割り当てるためにfftw_mallocやその他の関数を呼び出す必要があります。また、あなたのコードはプランを作成するだけですが、それを実行しないので、入力データに対してfftは実行されません。

+0

私はfftアルゴリズムをすべて実行していないことを実現しています。私がこのスニペットをアップロードしたのは、私がライブラリに行った呼び出し(fftw_malloc()を含む)が何の出力も生成されないという結果に関係なく表示されたためです。 –

+0

それは好奇心です。 VS2017を使用してコードをコンパイルしてリンクしても問題はありません。あなたのmingwのインストールやlibの生成に何か問題がありますか? – kjpus

+0

ええ、私は、明白なバージョンまたは何かと衝突があるかもしれないと思った。ありがとう、しかし...私は私がVisual Studioで作業しようと思う:) –

関連する問題