2013-01-27 25 views
9

Tôi đã phát hiện ra một loạt rò rỉ bộ nhớ với CRTDBG nhưng thấy khó khăn để theo dõi để cài đặt Visual Leak Detection. Điều này cho thấy một số lượng rò rỉ nhất quán mà tôi bắt nguồn từ các lớp trừu tượng không có các destructor ảo. Tôi cố định này và VLD bây giờ cho thấy không có rò rỉ bộ nhớ trong ứng dụng của tôi, tuy nhiên CRTDBG vẫn còn và nó hiển thị liên tục khoảng 100 hoặc hơn rò rỉ.VS2012, C++ 11 và phát hiện rò rỉ bộ nhớ (VLD vs CRTDBG)

Một trong hai công cụ này có thể tin cậy với C++ 11 không? Tôi đang sử dụng rất nhiều con trỏ độc đáo và hầu như không tạo ra bất kỳ vật thể mới nào mà không có chúng nên không thể hiểu được nơi rò rỉ đang đến từ đâu.

+0

Bạn có bất kỳ đối tượng toàn cục nào, có lẽ với 'unique_ptr'? Nếu bạn làm như vậy, chúng có thể được coi là "bộ nhớ bị rò rỉ". – Ali

+0

Bạn nói đúng, tôi tạo một thể hiện công cụ trò chơi của tôi trong chức năng chính mà tôi không xóa trước khi gọi _CrtDumpMemoryLeaks(). Tôi ngớ ngẩn quá! Nó nằm trên ngăn xếp để đặt thể hiện bên trong một khối trước khi _CrtDumpMemoryLeaks() làm giảm rò rỉ xuống 1 với CRTDBG. Cảm ơn! Bạn có thể thêm câu trả lời này làm câu trả lời để tôi có thể chấp nhận câu trả lời đó không? – Rajveer

+0

Tôi vừa đăng câu trả lời. Dù sao, upvoted câu hỏi của bạn! Thật tốt khi thấy rằng bạn quan tâm đến việc rò rỉ bộ nhớ này nhiều, tôi thường muốn các nhà phát triển khác làm như vậy ... – Ali

Trả lời

9

Nếu bạn có một số đối tượng trên toàn cầu hoặc thứ gì đó trên ngăn xếp trong main(), chúng sẽ không bị hủy trước khi thoát khỏi số main().

Nếu các đối tượng này phân bổ bộ nhớ động và bạn gọi _CrtDumpMemoryLeaks() ở cuối của main(), bạn sẽ vẫn thấy bộ nhớ đó là "bị rò rỉ".

Các vấn đề liên quan