Tôi có một chương trình mà segfaults từ số học con trỏ đôi khi. Tôi biết điều này xảy ra, nhưng tôi không thể dễ dàng kiểm tra trước để xem liệu nó có phân đoạn hay không - hoặc tôi có thể "quét trước" dữ liệu đầu vào để xem liệu nó có gây ra sự phân đoạn (không thể xác định), hoặc tôi có thể tái trang bị nó để không sử dụng số học con trỏ, mà sẽ đòi hỏi một số lượng công việc lớn hơn đáng kể, hoặc tôi có thể cố gắng để bắt một segfault. Vì vậy, câu hỏi của tôi:Bắt segfaults trong C
1) Làm thế nào, trong C, tôi có thể bắt một segfault? Tôi biết một cái gì đó trong hệ điều hành gây ra một segfault, nhưng những gì có thể một chương trình C làm trong trường hợp nó segfaults chết một chút duyên dáng hơn chỉ Segmentation fault
?
2) Di động như thế nào?
Tôi cho rằng đây là một hành vi không thể chuyển đổi cao, vì vậy nếu bạn đăng bất kỳ mã nào để bắt được đoạn mã, hãy cho tôi biết nó hoạt động như thế nào. Tôi đang sử dụng Mac OS X nhưng tôi muốn chương trình của mình hoạt động trên nhiều nền tảng nhất có thể và tôi muốn xem các tùy chọn của mình là gì.
Và đừng lo lắng - về cơ bản tất cả những gì tôi muốn làm là in thêm thông báo lỗi thân thiện với người dùng và giải phóng bộ nhớ ed malloc()
và sau đó chết. Tôi không có ý định bỏ qua tất cả các segfaults tôi nhận được và cày trước.
In thông báo lỗi; không giải phóng bộ nhớ, vì cơ hội là phong nha mà hệ thống bộ nhớ của bạn bị xáo trộn khi lỗi seg xảy ra. –