5

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.

+6

'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'. –

+0

@Daniel Fischer, il tuo approfondito commento sulle peculiarità della divisione intera e che causa SIGFPE merita una risposta. – chux

risposta

5

Probabilmente stai dividendo per zero o qualche altro numero senza senso. Sei sicuro che real e imag per IFFTOutput[i] non è zero? Stampalo poco prima forse?

+0

Sì, quello era il problema, mi mancava completamente. Stavo dividendo con 0. –

3

Penso che potrebbe essere un problema di divisione per 0, controlla il tuo valore.

-1

Avevo anche lo stesso problema. Si verifica a causa dell'utilizzo di un valore superiore al quale il tipo di dati può gestire per es. utilizzando un array di dimensioni 10^7 mentre lo hai definito come int A [10^7] grazie grazie grazie a un array int non può gestire questa dimensione. :)