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.
'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". –
@ Daniel Fischer, twój wnikliwy komentarz na temat dziwnych podziałów całkowitych i powodujących SIGFPE zasługuje na wysłanie odpowiedzi. – chux