2011-09-23 31 views
6

tôi cố gắng để cho phép phát hiện rò rỉ bộ nhớ msvc với số dòng như đoạn này tôi thấy here:Memory phát hiện rò rỉ với đẩy mạnh :: kiểm tra

Detected memory leaks! 
Dumping objects -> 
C:\PROGRAM FILES\VISUAL STUDIO\MyProjects\leaktest\leaktest.cpp(20) : {18} 
normal block at 0x00780E80, 64 bytes long. 
Data: <    > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD 
Object dump complete. 

Tôi cố gắng để thiết lập các tiền xử lý xác định

_CRTDBG_MAP_ALLOC

theo cách thủ công trong thuộc tính dự án nhưng tôi chỉ nhận được điều này:

Dumping objects -> 
{1466} normal block at 0x00BD4DD0, 40 bytes long. 
Data: <(o; ; (o; 1 > 28 6F 3B 00 90 A9 3B 00 28 6F 3B 00 00 D6 31 10 

không có số dòng. Tôi cũng đã cố xác định chính bằng cách sử dụng BOOST_TEST_NO_MAIN và tự mình kết xuất như sau:

int main(int argc, char* argv[]) 
{ 
    int res = ::boost::unit_test::unit_test_main(&init_function, argc, argv); 
    _CrtDumpMemoryLeaks(); 
    return res; 
} 

Nhưng cũng không thành công. Điều này có thể giải quyết như thế nào?

Trả lời

5

Sử dụng Boost.Test bạn có thể sử dụng --detect_memory_leaks = "number phân bổ"

+0

Tôi đã chấp nhận điều này vì điều này thậm chí còn tốt hơn! – schoetbi

4

Trong MSVC bạn có thể đặt một breakpoint với số phân bổ năm 1466, trong các mã:

_crtBreakAlloc = 1466 

hoặc trong cửa sổ Watch bạn có thể thêm _crtBreakAlloc và giá trị so năm 1466 khi ứng dụng bắt đầu (tất nhiên bạn cần một breakpoint trong chức năng chính). More details on MSDN

+0

Điều này giải quyết nó. Cảm ơn – schoetbi

0

Cố gắng sử dụng trình gỡ lỗi! Ví dụ, với sự giúp đỡ của deleaker có thể chọn ngăn xếp để xem nơi bộ nhớ đã được phân bổ

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