5

필자는 하나의 헤더 파일과 두 개의 소스 파일로 구성된 긴 프로그램을 가지고 있는데, 첫 번째 것은 함수 구현을 작성한 것이고 두 번째는 내 main), 나는 그들을 호출하고 실행한다. 비록, 한 지점에서 나는부동 소수점 예외 (코어 덤프)

부동 소수점 예외가 (코어 덤프)라는 오류 메시지가

을 얻고 프로그램이 중지됩니다.

많은 코드 라인이 있기 때문에 가장 관련성이 높은 부분을 게시하고 오류가 발생한 곳에서 전체 소스 코드를 게시 할 수는 없습니다. 나는 (당신은 그것의 구현을 찾을 수 아래)이 함수를 호출 할 때

내 오류가 발생합니다이 경우 단지에서

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

} 

, 내가 정의한 타입 정의입니다.

typedef struct { 
    int real, imag; 
} Complex; 

여기는이 함수가 호출되는 곳의 주요 부분입니다.

Complex HFirst[64]; 

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

나는 이전 64 개 요소를 모두 복잡한 배열을 몇 가지 다른 fft_input에 값을 넣어 기능, ifft_bpsk_output를 불렀다.

+6

'IFFTOutput [i] .real' (또는'.imag')는 0입니다. (또는'-1'이고 배당금은 INT_MIN입니다.) 일부 플랫폼에서는 또 다른 가능성이 있습니다. 0이면 'SIGFPE'가 발생합니다. –

+0

@ 대니얼 피셔 (Daniel Fischer), 정수 나누기의 단점과 SIGFPE의 원인에 대한 귀하의 통찰력있는 의견은 답변 게시 권한이 있습니다. – chux

답변

5

아마 0이나 다른 무의미한 숫자로 나눌 수 있습니다. IFFTOutput[i]에 대해 realimag이 0이 아니십니까? 아마 전에 인쇄 해 봤어?

+0

예, 그게 문제였습니다. 나는 그것을 완전히 놓쳤습니다. 0으로 나누었습니다. –

3

0으로 나누면 문제가 될 수 있다고 생각합니다. 그 값을 확인하십시오.

-1

나는 또한 동일한 문제가 발생했습니다. 이는 데이터 유형이 예를 들어 으로 처리 할 수있는 것보다 큰 값을 사용하기 때문에 발생합니다. 이이 정도의 크기를 처리 할 수있는 int 배열 becouz 덤프 것이다 A [10^7 INT로 정의하면서 그래서 만약 해당 데이터 타입을 사용해야 .. 크기 10^(7)의 배열을 사용 은 .. 당신 감사 :)