【问题标题】:`fftw_malloc' segfault on 64-bit linux machine64位Linux机器上的“fftw_malloc”段错误
【发布时间】:2012-07-12 18:53:50
【问题描述】:

我正在尝试重新编译一个使用 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 上出现段错误。

【问题讨论】:

  • 程序段错误在哪个 fftw_malloc 调用上?看起来每个电话都是一样的,这似乎是一个愚蠢的问题。
  • 忘了说。它在 gabor_filter 上出现段错误,但如果对变量重新排序,无论是第一个段错误(即,当 block_signal 是第一个时,都会出现段错误)
  • 你可以试试fftw_complex *fftw_alloc_complex(size_t n); 看看会发生什么吗?它是分配复合体的便利功能。只是想知道接下来会发生什么。
  • 我得到一个编译错误:在成员函数 FtrCalc_Rasta::Process_Gabor(...) 错误:在 '*' 标记之前的预期主表达式 //第一个 fftw_alloc_complex 行错误:'fftw_alloc_complex' 未定义在这个范围内

标签: c++ segmentation-fault fftw


【解决方案1】:

看来您需要升级到 3.3.3。我不确定为什么您的设置不起作用,但 fftw_alloc_complex() 直到 3.3-beta1 才添加:

新的便利函数 fftw_alloc_real 和 fftw_alloc_complex 对没有类型转换的实数和复数数组使用 fftw_malloc 或 大小。

FFTW 3 release notes

升级后,还会出现这种情况吗? (您的原始问题或对@ArjunShankar 评论的回复)

【讨论】:

    猜你喜欢
    • 2011-02-12
    • 2014-12-25
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-20
    • 1970-01-01
    相关资源
    最近更新 更多