Tôi có một chương trình thực hiện một số thuật toán tìm kiếm heuristic và một số tên miền, được thiết kế để đánh giá thực nghiệm các thuật toán khác nhau. Chương trình được viết bằng C++, được xây dựng bằng cách sử dụng GNU toolchain và chạy trên hệ thống Ubuntu 64 bit. Khi tôi chạy thử nghiệm của mình, tôi sử dụng lệnh bash's ulimit
để giới hạn số lượng bộ nhớ ảo mà quy trình có thể sử dụng để hệ thống thử nghiệm của tôi không bắt đầu hoán đổi.Tại sao chương trình của tôi thỉnh thoảng bị phân đoạn khi hết bộ nhớ thay vì ném std :: bad_alloc?
Một số kết hợp thuật toán/thử nghiệm nhất định đạt đến giới hạn bộ nhớ mà tôi đã xác định. Hầu hết thời gian, chương trình ném một std :: bad_alloc exception, được in bởi trình xử lý mặc định, tại điểm chương trình chấm dứt. Thỉnh thoảng, thay vì điều này xảy ra, chương trình chỉ đơn giản là segfaults.
Tại sao chương trình của tôi đôi khi bị gián đoạn khi hết bộ nhớ, thay vì báo cáo lỗi không hợp lệ :: bad_alloc và chấm dứt?
segfault có thể được gây ra không chỉ bởi vì bạn đạt đến giới hạn của bộ nhớ – Andrey
Tôi khá biết. Trong trường hợp tôi đã thấy một segfault, quá trình này đã được sử dụng số lượng bộ nhớ gần giới hạn tôi đã chỉ định. Tôi khá tự tin rằng các segfaults tôi thấy không phải do lỗi trong mã của tôi. –
Bạn đã xem xét một hoạt động đơn giản trong GDB (Vâng một vài trong số họ) để xem phần nào của mã seg-lỗi? – Shiroko