2011-09-23 8 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ổ