2010-01-28 35 views
10

Tôi đang cố gắng sử dụng _CrtDumpMemoryLeaks() để hiển thị rò rỉ bộ nhớ trong các chương trình của tôi.Cách sử dụng _CrtDumpMemoryLeaks()

Nhưng nó không hiển thị bất cứ điều gì ngoại trừ trả về 0 trong trường hợp không có rò rỉ bộ nhớ và 1 trong trường hợp có rò rỉ.

Các link đây cho thấy sản lượng nên được như:

Detected memory leaks! 
Dumping objects -> 
D:\VisualC++\CodeGuru\MemoryLeak\MemoryLeak.cpp(67) : {60} 
normal block at 0x00324818, 4 bytes long. 
Data: <, > 2C 00 00 00 
Object dump complete. 

bất cứ ai có thể đề xuất một cách chính xác của việc sử dụng chức năng này.

+0

Tôi có cùng một vấn đề. Bạn có tìm ra nguyên nhân của vấn đề không? – Horcrux7

+0

http://msdn.microsoft.com/en-us/library/fxszt639%28VS.80%29.aspx Trong trường hợp của tôi, tôi không đặt chế độ báo cáo. Hãy thử chương trình mẫu được cung cấp trong liên kết và bạn sẽ có thể xem đầu ra – pankajt

Trả lời

17

Tải xuống mẫu từ link sau. Bạn phải thiết lập các thông số sau để trực tiếp xuất ra bàn điều khiển.

// Send all reports to STDOUT 
    _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE); 
    _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDOUT); 
    _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE); 
    _CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDOUT); 
    _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE); 
    _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDOUT); 
3

Sau khi tìm kiếm lý do tại sao nó không hoạt động trong mã của tôi, tôi tìm thấy những điểm sau:

  • Nếu không có rò rỉ được phát hiện sau đó phương pháp in này không có gì.
  • Không phải tất cả các phương pháp phân bổ đều bị ảnh hưởng. Ví dụ CoTaskMemAlloc không bị ảnh hưởng.
  • Cảnh báo phải được bật bằng _CrtSetReportMode và _CrtSetReportFile.
+0

cảm ơn bạn đã chia sẻ thông tin – pankajt