Ho un programma lungo, che consiste in un file di intestazione e due file di origine, nel primo ho scritto le implementazioni delle funzioni e nel secondo (che è il mio main), li chiamo e li eseguo. Anche se, a un certo punto ricevo un messaggio di errore che diceEccezione punto mobile (core scaricato)
Eccezione di virgola mobile (core dumped)
e il programma si ferma.
Come ho detto, ci sono molte righe di codice, quindi, non sono in grado di pubblicare il mio intero codice sorgente qui, anche se posterò le parti più rilevanti e dove si verifica l'errore.
mio errore si verifica quando si tenta di chiamare questa funzione (di seguito potete trovare la sua attuazione):
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;
}
}
In questo caso complesso, è una definizione di tipo che ho definito.
typedef struct {
int real, imag;
} Complex;
Ecco la parte dal principale, dove viene chiamata questa funzione.
Complex HFirst[64];
if((strcmp(channel, "LS") == 0) || (strcmp(channel, "ls") == 0))
{
if(i == 1)
chest_first(fft_input, ifft_bpsk_output, HFirst);
.
.
.
}
ho precedenza chiamato qualche altra funzione, che ha messo valori fft_input e ifft_bpsk_output, entrambe le matrici complesse con 64 elementi.
'IFFTOutput [i] .real' (o' .imag') è 0. (Oppure '-1', e il dividendo è' INT_MIN' è un'altra possibilità su alcune piattaforme.) Confusamente, una divisione intera per 0 dà origine a 'SIGFPE'. –
@Daniel Fischer, il tuo approfondito commento sulle peculiarità della divisione intera e che causa SIGFPE merita una risposta. – chux