5

Tôi có một chương trình dài, bao gồm một tệp tiêu đề và hai tệp nguồn, trong tệp đầu tiên tôi đã viết các triển khai của các hàm và trong tệp thứ hai (là của tôi chính), tôi gọi và thực hiện chúng. Mặc dù vậy, tại một thời điểm tôi nhận được một thông báo lỗi nóiNgoại lệ dấu chấm động (core dumped)

Floating điểm ngoại lệ (core dumped)

và chương trình dừng lại.

Như tôi đã nói có rất nhiều dòng mã, do đó, tôi không thể đăng toàn bộ mã nguồn của mình ở đây, mặc dù tôi sẽ đăng các phần có liên quan nhất và nơi xảy ra lỗi.

lỗi của tôi xảy ra khi tôi cố gắng để gọi chức năng này (bên dưới, bạn có thể tìm thấy việc thực hiện):

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

} 

Trong trường hợp này phức tạp, là một định nghĩa kiểu mà tôi đã xác định.

typedef struct { 
    int real, imag; 
} Complex; 

Đây là phần chính, nơi chức năng này được gọi.

Complex HFirst[64]; 

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

Trước đó tôi đã gọi một số chức năng khác, đặt giá trị cho fft_input và ifft_bpsk_output, cả hai mảng phức hợp với 64 phần tử.

+6

'IFFTOutput [i] .real' (hoặc' .agag') là 0. (Hoặc '-1' và cổ tức là' INT_MIN' là một khả năng khác trên một số nền tảng.) Nhạy cảm, một bộ phận nguyên bởi 0 làm tăng 'SIGFPE'. –

+0

@Daniel Fischer, nhận xét sâu sắc của bạn về các quirks của phân chia số nguyên và khiến SIGFPE xứng đáng được trả lời. – chux

Trả lời

5

Có thể bạn đang chia cho số không hoặc một số số vô nghĩa khác. Bạn có chắc chắn realimag cho IFFTOutput[i] không phải là số không? In nó ra trước khi có lẽ?

+0

Vâng, đó là vấn đề, tôi hoàn toàn bỏ lỡ nó. Tôi đã chia với 0. –

3

Tôi nghĩ rằng nó có thể là một vấn đề chia cho 0, kiểm tra giá trị của bạn về điều đó.

-1

Tôi cũng gặp vấn đề tương tự. Nó xảy ra do sử dụng giá trị lớn hơn kiểu dữ liệu của bạn có thể xử lý cho ví dụ cũ. bằng cách sử dụng một mảng có kích thước 10^7 trong khi bạn đã xác định nó là int A [10^7] điều này sẽ bị bỏ qua vì một mảng int không thể xử lý được nhiều kích thước này .. Vì vậy, bạn phải sử dụng các kiểu dữ liệu thích hợp .. cảm ơn bạn :)

Các vấn đề liên quan