使用 FFTW 庫處理信號時,fftw_malloc 分配失敗通常源於參數錯誤或指針未初始化。以下針對典型代碼問題逐一分析:
// 分配失敗檢查
if((in1==NULL)||(out==NULL)){
// 提示失敗
}
// 但 in1、out 從未被賦值!
in1、out 宣告但未分配內存,直接判斷 ==NULL 為真,誤以為分配失敗。in,檢查卻用 in1。N 超過可用內存,fftw_malloc 確會返回 NULL,需檢查 N 定義。const int N = 1024; // 確保合理
fftw_complex *in = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N);
fftw_complex *out = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N);
if (in == NULL || out == NULL) {
// 真正的分配失敗處理
fftw_free(in); fftw_free(out);
return;
}
// 讀取 .dat 文件
std::ifstream fin("data.dat", std::ios::binary);
fin.read(reinterpret_cast(in), sizeof(fftw_complex) * N);
// ... FFTW 處理 ...
fftw_free(in);
fftw_free(out);
fftw_malloc 保證內存對齊(SIMD 指令集要求),必須配對 fftw_free 釋放,不可用 free 或 delete。N * sizeof(fftw_complex) 一致,避免讀越界。AfxBeginThread)。修正指針初始化與變量名,即可解決「內存申請失敗」的誤報。