【发布时间】:2016-11-04 14:37:34
【问题描述】:
大家下午好, 因此,我正在学习使用 FFTW,并且正在测试从真实到复杂的一维 DFT,并且一切正常。然后现在我尝试对 2D 转换做同样的事情,但我发现我的程序失败了。
问题是,当我尝试执行我的计划时,我得到了 Segmentation Fault (core dumped)。 1D 计划没有发生这种情况,我已经阅读了 Stack Overflow 中的所有文档和其他问题,但我找不到我的程序失败的地方。
您可以看到,在代码中有几个打印可以找到我的程序崩溃的位置,它只是在执行时打印executing,但从未到达executed,所以我认为错误应该来自计划声明,但我不知道为什么。
// Declaring variables
const int Nx=88;
const int Ny=44;
const int DataFiles=512;
fftw_complex *out2;
double *in2= (double *) fftw_malloc(sizeof(double) * Ny*Nx );
out2 = (fftw_complex*) fftw_malloc( Nx*(Ny/2+1) * sizeof(fftw_complex));
fftw_plan p2 = fftw_plan_dft_r2c_2d (Ny,Nx, in2, out2, FFTW_ESTIMATE);
printf("done \n");
for (n=0; n<DataFiles;n++){
// Filling input with the data
for(kjj=0;kjj<Ny;kjj++){
for(kii=0;kii<Nx;kii++){
index = kjj*Nx + kii;
in[index]=data[n][kii][kjj];
}}
printf("executing \n");
fftw_execute(p2);
printf("executed \n");
// DO THINGS WITH OUT[][]
}
我尝试在计划中更改 Nx Ny 的顺序,因为我不确定它是否是应该先行的最小但无论如何我得到了错误。
任何可能是问题的帮助或指出都会是一种巨大的解脱。非常感谢。
【问题讨论】:
-
为了您自己和我们的利益,请在以后的文章中在代码中添加正确的缩进(每个嵌套块中总是一个制表符或四个空格)。此外,如何在不声明类型的情况下声明 for (kjj = 0; etc.),例如for (int kjj = 0; etc..)?