Tôi đang làm việc trên một bộ xử lý nhúng (400 MHz Intel PXA255 XScale), và tôi nghĩ rằng tôi thấy một trường hợp không đủ bộ nhớ để đáp ứng hoạt động 'mới'. Chương trình đã không sụp đổ, vì vậy tôi giả định các chủ đề khác đã giải phóng bộ nhớ của họ và nó chỉ là một điều thoáng qua. Đây là một số mã khá quan trọng, vì vậy thoát ra không phải là một lựa chọn, và một số loại lỗi cần phải được trả lại cho người dùng từ xa.Khôi phục lỗi phân bổ bộ nhớ động
Sửa chữa nhỏ sau đây có đủ để giải quyết vấn đề không, hoặc có cách nào tốt hơn không? Trước khi thay thế mọi 'mới' bằng đoạn mã sau, tôi nghĩ tôi sẽ hỏi.
char someArr[];
do{
someArr = new char[10];
Sleep(100); // no justification for choosing 100 ms
} while (someArr == NULL);
Trợ giúp về chế độ ngủ có giúp được không? Tôi có nên đặt một số lần thử lại tối đa không? Có thể sử dụng khởi tạo tĩnh ở mọi nơi không?
CẬP NHẬT CUỐI CÙNG: Cảm ơn bạn rất nhiều vì những phản hồi hữu ích, nhưng hóa ra là đã xảy ra lỗi khi kiểm tra mã để phân bổ bộ nhớ không thành công. Tôi sẽ giữ tất cả các câu trả lời trong tâm trí, và thay thế nhiều malloc và mới như tôi có thể, mặc dù (đặc biệt là trong mã xử lý lỗi).
Vấn đề đằng sau tất cả điều này là khoảng 99% của tất cả các mã không có khái niệm làm thế nào để xử lý phân bổ bộ nhớ không thành công một cách duyên dáng. Ứng dụng không theo những cách bí ẩn. Không có bộ nhớ miễn phí mang lại cho hầu như tất cả các hệ điều hành để dừng lại screeching. Đáng buồn nhưng là sự thật. – Thorsten79