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
相关产品推荐
相关产品推荐

