浮点异常(核心转储)

时间:2013-06-25 14:22:19

标签: c exception floating-point coredump floating-point-exceptions

我有一个很长的程序,它包含一个头文件和两个源文件,在第一个我编写了函数的实现,在第二个(我的主要),我调用并执行他们。虽然,有一次我得到一条错误信息

  

浮点异常(核心转储)

,程序停止。

正如我所说,有很多代码行,因此,我无法在此发布我的整个源代码,但我会发布最相关的部分,以及发生错误的地方。

当我尝试调用此函数时,我的错误发生了(下面你可以找到它的实现):

void chest_first(Complex* FFTInput, Complex* IFFTOutput, Complex* HFirst)
{
    int i;

    for(i = 0; i < 64; i++)
    {
        HFirst[i].real = FFTInput[i].real / IFFTOutput[i].real;
        HFirst[i].imag = FFTInput[i].imag / IFFTOutput[i].imag;
    }

}

在这种情况下,Complex是我定义的类型定义。

typedef struct {
    int real, imag;
} Complex;

这是main的部分,这个函数被调用。

  Complex HFirst[64];

  if((strcmp(channel, "LS") == 0) || (strcmp(channel, "ls") == 0))
  {
      if(i == 1)
        chest_first(fft_input, ifft_bpsk_output, HFirst);
      .
      .
      .
  }

我之前已经调用了一些其他函数,它将值放到fft_input和ifft_bpsk_output,它们都是64个元素的复杂数组。

3 个答案:

答案 0 :(得分:5)

你可能除以零或其他一些荒谬的数字。您确定real的{​​{1}}和imag不是零吗?可能在之前打印出来吗?

答案 1 :(得分:3)

我认为这可能是除以0的问题,检查你的价值。

答案 2 :(得分:-1)

我也遇到了同样的问题。由于使用的值大于数据类型可以处理的值,所以会发生这种情况 对于前 使用大小为10 ^ 7的数组,同时将其定义为int A [10 ^ 7] 这将抛弃becouz一个int数组无法处理这么大的.. 所以你必须使用适当的数据类型.. 谢谢 :)