2011-09-23 95 views
6

我嘗試啓用MSVC的內存泄漏檢測與這樣的片段,我發現here行號:內存泄漏檢測與升壓::測試

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. 

我試圖設置預處理器定義

_CRTDBG_MAP_ALLOC

手動

在項目屬性,但我只得到這樣的:

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 

沒有行號。我也試圖通過手動使用BOOST_TEST_NO_MAIN這樣定義主要和轉儲由自己:

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

而且沒有任何成功。如何才能做到這一點?

回答

5

使用如Boost.Test可以使用--detect_memory_leaks = 「分配數量」

+0

我接受了這個,因爲這更好! – schoetbi

4

在MSVC可以斷點設置分配編號1466,代碼:

_crtBreakAlloc = 1466 

或在監視窗口中,您可以添加_crtBreakAlloc和價值1466一旦應用程序啓動(當然你需要一個主函數中的斷點)。 More details on MSDN

+0

這解決了它。謝謝 – schoetbi

0

嘗試使用調試器!例如,藉助於deleaker可以選擇棧來查看內存分配的位置