繁体   English   中英

当我尝试打印不是字符串的内容时,Cout 触发断点

[英]Cout trigger breakpoint when i try to print something which is not a string

我试图在 c++ 中构建 fft function。 我意识到这个过程中存在错误,所以我想自己打印每个步骤。 当我尝试对不是字符串的所有内容执行 cout 时,它会触发断点和错误:“堆已损坏”主要是有时有时没有任何帮助,或者建议将不胜感激。 在此处输入图像描述

编辑:修复后的代码

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;
    }
}

您使用len / 2元素动态分配了 arrays 。 但是在这样的 for 循环中

for ( int i = 0; i <= len/2; i++ )

您正在尝试访问导致未定义行为的len / 2 + 1元素。 索引的有效范围是[0, len / 2 )

你必须写

for ( int i = 0; i < len/2; i++ )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM