Memory management dft_c2r_2d&;分配内存错误;FFTW_保存_输入

Memory management dft_c2r_2d&;分配内存错误;FFTW_保存_输入,memory-management,malloc,fft,allocation,fftw,Memory Management,Malloc,Fft,Allocation,Fftw,我想做一个“复杂到真实”的转换,意思是IFFT。我意识到我需要保留转换的输入以备以后使用,所以我在“dft”的计划中添加了一个标志:“preserve_INPUT” 添加此标志后,我在编译时遇到了一个问题,它会转到“dbgmalloc.c”,这意味着这应该是一个分配内存问题,但我没有更改任何内容,没有新标志,它工作正常 你能给我一些提示吗 // IFFT ( U1,U2 --> u1,u2) //----IFFT----- double *u1 = (double*

我想做一个“复杂到真实”的转换,意思是IFFT。我意识到我需要保留转换的输入以备以后使用,所以我在“dft”的计划中添加了一个标志:“preserve_INPUT”

添加此标志后,我在编译时遇到了一个问题,它会转到“dbgmalloc.c”,这意味着这应该是一个分配内存问题,但我没有更改任何内容,没有新标志,它工作正常

你能给我一些提示吗

    // IFFT ( U1,U2 --> u1,u2)
    //----IFFT-----
    double *u1 = (double*) malloc(sizeof(double)*N_fft);
    double *u2 = (double*) malloc(sizeof(double)*N_fft);
    fftw_plan p3;
    fftw_plan p4;

    p3 = fftw_plan_dft_c2r_2d(alto, ancho, U1, u1, FFTW_ESTIMATE|FFTW_PRESERVE_INPUT);
    p4 = fftw_plan_dft_c2r_2d(alto, ancho, U2, u2, FFTW_ESTIMATE|FFTW_PRESERVE_INPUT);
    fftw_execute(p3); 
    fftw_execute(p4); 
    fftw_destroy_plan(p3);
    fftw_destroy_plan(p4); 
问候


Antonio

从该链接中可以看出,多维实DFT不支持此标志


如上所述,c2r变换会破坏其输入数组,即使对于不合适的变换也是如此。如有必要,可以通过在标志中包含FFTW_PRESERVE_输入来防止这种情况,但遗憾的是在性能上会有一些牺牲。多维实DFT当前也不支持此标志(下一节)。

您应该使用
fftw\u malloc
,而不是
malloc
。感谢您的回答。指针“u1”和“u2”用于输出,这就是为什么我使用malloc,对于向量u1和u2,我使用fftw\u malloc,这肯定是另一回事,因为它在我添加“fftw\u preserve\u input”之前一直有效。