2010-03-16 2 views
10

Tôi có một chương trình Qt hiển thị dữ liệu mà nó nhận được qua UDP. Nó hoạt động tốt trong khoảng 30 giây nhưng sau một thời gian nó mang lại cho Phân đoạn lỗi và sự cố. 30 giây này cũng không cố định.Whats SIGSEGV, lỗi phân đoạn trong Qt

tôi đã sử dụng các trình gỡ lỗi và nhận điều này:

Program received signal SIGSEGV, Segmentation fault. 
0x003c6fd4 in ??() from /usr/lib/libQtGui.so.4 

Bất cứ ai có cho tôi biết nơi các lỗi có thể được?

+0

Nếu bạn tải xuống và sử dụng phiên bản gỡ lỗi của libQT, bạn sẽ có thể nhìn thấy trong stacktrace chính xác nơi nó bị treo. Gợi ý, cài đặt 'qt-debug * .rpm' nếu bạn đang sử dụng hệ thống rpm. –

Trả lời

11

Điều đó có nghĩa là chương trình của bạn đã cố truy cập bộ nhớ không thuộc về nó. Về cơ bản, bạn có một con trỏ có chứa một giá trị không hợp lệ một nơi nào đó trong mã của bạn - một nguồn phổ biến của lỗi này là dereferencing một con trỏ NULL.

+0

Có thể có một lỗi trong mã QT của khóa học. –

+1

@wic Không bao giờ nghĩ như vậy cho đến khi bạn đã chứng minh một cách thấu đáo không có lỗi trong mã của BẠN. –

+1

Không có lỗi trong mã Qt rõ ràng đó là một sai lầm ngớ ngẩn về phía tôi. – user269037

2

Bạn cần trình gỡ rối (và đảm bảo bạn có các tệp nhị phân có thông tin gỡ lỗi) - hãy kiểm tra dấu vết ngăn xếp tại trang web sự cố. Tôi khá giả định mã của riêng bạn sẽ xuất hiện ở đâu đó, và đây là điểm bắt đầu. Kiểm tra phân bổ, kích thước bộ đệm…

+0

Yah trình gỡ lỗi đã giúp đỡ rất nhiều. Havent sử dụng nó nhiều trước đây. – user269037

1

Đảm bảo bạn đã cấp mảng mà bạn đang gán dữ liệu cho.

Tôi liên tục gặp lỗi này vì không phân bổ.

Ví dụ tôi đã sử dụng:

char* m_tempBuff; 
*(int*) m_tempBuff = i; 

Sau đổi, và nó làm việc:

char m_tempBuff[sizeof(int)]; 
*(int*) m_tempBuff = i; 

Best of luck! :)