6

我尝试使用行号启用 msvc 内存泄漏检测,如下所示

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;
}

但也没有任何成功。如何才能做到这一点?

4

3 回答 3

5

使用 Boost.Test 你可以使用 --detect_memory_leaks="allocation number"

于 2011-09-24T19:07:20.400 回答
4

在 MSVC 中,您可以在代码中为分配编号 1466 设置断点:

  _crtBreakAlloc = 1466

或者在应用程序启动后,您可以在 Watch 窗口中添加_crtBreakAlloc并赋值 1466(当然您需要在 main 函数中设置断点)。有关 MSDN 的更多详细信息

于 2011-09-23T07:29:11.203 回答
0

尝试使用调试器!例如,借助 deleaker 可以选择堆栈以查看内存分配的位置

于 2011-11-21T16:09:12.053 回答