Mã này mang lại cho tôi Segmentation Fault khoảng 1/2 thời gian:Phân đoạn do thiếu bộ nhớ trong C
int main(int argc, char **argv) {
float test[2619560];
int i;
for(i = 0; i < 2619560; i++)
test[i] = 1.0f;
}
tôi thực sự cần phải phân bổ một mảng lớn hơn nhiều, có một số cách để cho phép hệ điều hành để cho phép tôi có thêm bộ nhớ?
Tôi đang sử dụng Linux Ubuntu 9.10
Nếu bạn sử dụng malloc, bạn có thể kiểm tra mã nếu phân bổ thành công - tốt hơn nhiều so với chạy thông qua phân bổ và hy vọng nó không sụp đổ. (addendum, không quá nhiều bình luận @caf) –
@Sam Dufel Hãy lưu ý rằng một số hệ thống (ví dụ: linux theo mặc định) có thể trả lại cho bạn một con trỏ không null từ malloc ngay cả khi bạn đã hết bộ nhớ - dẫn đến các sự cố tương tự khi bạn cố gắng truy cập vào bộ nhớ đó. – nos
Có lẽ chính xác hơn khi nói rằng một số hệ thống tách các khái niệm phân bổ không gian địa chỉ ảo và cam kết lưu trữ sao lưu. – caf