You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++实现FFT时cout输出非字符串触发堆损坏断点求助

FFT实现中的堆损坏错误及修复代码

我在用C++实现FFT函数时发现存在错误,想打印每一步执行结果排查问题,但使用cout输出非字符串类型数据时,会触发断点并抛出**“A heap has been corrupted”(堆已损坏)**错误,这个问题在main函数中偶发。

以下是修复后的FFT实现代码:

complex<double>* fft(complex<double>* signal, int len)
{
    if (len == 1) return signal;
    else
    {
        const complex<double> J(0, 1);
        const double PI = 3.14159265358979323846;
        const double THRESHOLD = 1e-10;
        complex<double> w(1, 0);
        complex<double>* x_d1 = new complex<double>[len / 2];
        complex<double>* x_d2 = new complex<double>[len / 2];
        for (int i = 0; i < len/2; i++)
        {
            x_d1[i] = signal[2*i];
            x_d2[i] = signal[2*i + 1];
        }
        complex<double>* y_1 = fft(x_d1, len / 2);
        complex<double>* y_2 = fft(x_d2, len / 2);
        complex<double>* dft = mergePointers(y_1, y_2, len / 2);
        delete[] x_d1, x_d2, y_1, y_2;
        for (int k = 0; k < len/2; k++)
        {
            complex<double> p = dft[k];
            complex<double> w_k = exp(J * ((-2*PI*k) / len));
            complex<double> q = w_k * dft[k + (len / 2)];
            dft[k] = p + q;
            dft[k + len / 2] = p - q;
            if (abs(dft[k].real()) < THRESHOLD) dft[k] = complex<double>(0, dft[k].imag());
            if (abs(dft[k].imag()) < THRESHOLD) dft[k] = complex<double>(dft[k].real(), 0);
            if (abs(dft[k + (len / 2)].real()) < THRESHOLD) dft[k + (len / 2)] = complex<double>(0, dft[k + (len / 2)].imag());
            if (abs(dft[k + (len / 2)].imag()) < THRESHOLD) dft[k + (len / 2)] = complex<double>(dft[k + (len / 2)].real(), 0);
        }
        return dft;
    }
}

内容的提问来源于stack exchange,提问作者DarkKnight35

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 17:37:03