2011-09-23 65 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可以选择栈来查看内存分配的位置