Tôi có một lỗi khá nghiêm trọng trong chương trình của tôi - thỉnh thoảng gọi đến new() ném bad_alloc.Gỡ rối chiến lược để tìm nguyên nhân của bad_alloc
Từ các tài liệu tôi có thể tìm thấy trên bad_alloc, nó dường như bị ném vì những lý do:
Khi máy tính chạy ra khỏi bộ nhớ (mà chắc chắn không xảy ra, tôi có 4GB RAM, chương trình ném bad_alloc khi sử dụng ít hơn 5MB (kiểm tra trong taskmanager) với không có gì nghiêm trọng chạy trong nền).
Nếu bộ nhớ quá phân mảnh để phân bổ khối mới (không, khối lượng lớn nhất mà tôi từng phân bổ sẽ là khoảng 1KB và không được thực hiện quá 100 lần trước khi xảy ra sự cố).
Dựa trên những mô tả này, tôi không thực sự có bất kỳ nơi nào có thể ném bad_alloc.
Tuy nhiên, ứng dụng tôi đang chạy chạy nhiều hơn một chuỗi, có thể có thể góp phần gây ra sự cố. Bằng cách kiểm tra tất cả các đối tượng trên một sợi đơn, mọi thứ dường như hoạt động trơn tru. Điều duy nhất mà tôi có thể nghĩ về điều đó đang diễn ra ở đây có thể là một loại tình trạng chủng tộc gây ra bằng cách gọi mới() ở nhiều nơi cùng một lúc, nhưng tôi đã thử thêm các mutex để ngăn chặn hành vi đó không có hiệu lực.
Vì chương trình là vài trăm dòng và tôi không biết vấn đề nằm ở đâu, tôi không chắc chắn về những gì, nếu có, đoạn mã để đăng. Thay vào đó, tôi đã tự hỏi liệu có bất kỳ công cụ nào giúp tôi thử nghiệm loại điều này hay không, hoặc nếu có bất kỳ chiến lược chung nào có thể giúp tôi giải quyết vấn đề này.
Tôi đang sử dụng Microsoft Visual Studio 2008, với Poco để phân luồng.
Thực ra đó là vấn đề ... không biết chính xác vấn đề là ở đâu, nhưng có rất nhiều biến bị biến mất lang thang xung quanh ở những nơi kỳ lạ - có vẻ như có một điều kiện chủng tộc ở đâu đó. Cảm ơn bạn! – Salami
Đó là trường hợp của tôi ... Tôi nghĩ tôi đang gọi 'new char [_len] ', nhưng tôi đã gọi' new char [len]' khi 'len' không được khởi tạo nhưng có lẽ một số lượng lớn. Nó thực sự giúp suy nghĩ về bao nhiêu không gian tôi yêu cầu và để xem xét các giá trị gần hơn. Cảm ơn câu trả lời. – flcoder