我尝试启用带有行号的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手动定义main并自行转储,如下所示:
int main( int argc, char* argv[] )
{
int res = ::boost::unit_test::unit_test_main( &init_function, argc, argv );
_CrtDumpMemoryLeaks();
return res;
}
但也没有任何成功。怎么办呢?
答案 0 :(得分:5)
使用Boost.Test,您可以使用--detect_memory_leaks =“分配编号”
答案 1 :(得分:4)
在MSVC中,您可以在代码中设置分配号码1466的断点:
_crtBreakAlloc = 1466
或在Watch窗口中,您可以在应用程序启动后添加_crtBreakAlloc
和值1466(当然,您需要在main函数中使用断点)。 More details on MSDN
答案 2 :(得分:0)
尝试使用调试器!例如,在deleaker的帮助下可以选择堆栈以查看内存的分配位置