5

Mam długi program, który składa się z jednego pliku nagłówkowego i dwóch plików źródłowych, w pierwszym napisałem implementacje funkcji, aw drugim (który jest moim główne), wywołuję i wykonuję je. Choć w pewnym momencie pojawia się komunikat o błędzieWyjątek zmiennoprzecinkowy (core dumped)

wyjątkowy zmiennoprzecinkowy (core dumped)

i program zatrzymuje się.

Jak już powiedziałem, istnieje wiele linii kodu, w związku z tym nie jestem w stanie opublikować całego mojego kodu źródłowego tutaj, jednak opublikuję najbardziej odpowiednie części i gdzie wystąpi błąd.

Mój błąd występuje podczas próby wywołania tej funkcji (poniżej znajdziesz jej realizację):

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

} 

W tym przypadku Complex, to definicja typu, że mam zdefiniowane.

typedef struct { 
    int real, imag; 
} Complex; 

Oto część z głównej strony, w której wywoływana jest ta funkcja.

Complex HFirst[64]; 

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

ja wcześniej nazywany jakąś inną funkcję, która umieścić wartości fft_input i ifft_bpsk_output, które są zarówno Complex tablice z 64 elementów.

+6

'IFFTOutput [i] .real' (lub .imag') to 0. (Lub' -1', a dywidenda to 'INT_MIN' to kolejna możliwość na niektórych platformach.) Mylnie, podział na liczby całkowite przez 0 oznacza "SIGFPE". –

+0

@ Daniel Fischer, twój wnikliwy komentarz na temat dziwnych podziałów całkowitych i powodujących SIGFPE zasługuje na wysłanie odpowiedzi. – chux

Odpowiedz

5

Prawdopodobnie dzielisz przez zero lub inny bezsensowny numer. Czy na pewno real i imag dla IFFTOutput[i] nie jest zero? Wydrukuj to przed chwilą?

+0

Tak, to był problem, zupełnie to przegapiłem. Dzieliłem z 0. –

3

Myślę, że to może być problem dzielenia przez 0, sprawdź swoją wartość na ten temat.

-1

Miałem również ten sam problem. Występuje z powodu użycia wartości większej niż twój typ danych może obsłużyć dla ex. użyciu tablicę o rozmiarze 10^7, podczas gdy zdefiniowane jako int A [10^7] będzie dumpingowych becouz int tablicy nie może obsłużyć tyle wielkość .. Więc trzeba stosować odpowiednie typy danych .. dziękuję :)