【发布时间】:2014-08-13 14:30:49
【问题描述】:
我目前正在调试一些代码,使用带有 CrtDbg 的 Visual Studio 2012 删除或至少定位内存泄漏。
问题是,只要分配号不变,追踪分配是相当容易的。当分配数变化很大(或不是真正确定的)时,我如何定位该泄漏的分配点?我至少可以说,哪个模块分配了内存?
我在关闭应用程序时有以下几行:
Detected memory leaks!
Dumping objects ->
{2789444} normal block at 0x0000000006103CB0, 32 bytes long.
Data: < q f > B8 71 E4 66 00 00 00 00 00 00 00 00 00 00 00 00
{1269709} normal block at 0x000000000A50C6A0, 1008 bytes long.
Data: < ) > 01 00 00 00 0B 00 00 00 29 00 00 00 CD CD CD CD
...
{2194} normal block at 0x0000000000278060, 16 bytes long.
Data: < > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Object dump complete.
最后一个分配号 2194 是可重现的,并且与静态初始化器有关。但其他数字正在发生变化。
我不能使用地址来定位它吗?还是有更简单的解决方案?
帮助会很大。
【问题讨论】:
-
是否可以在这段代码中使用像 valgrind 这样的分析器?
-
不,它是一个原生的 Windows 应用程序。
-
啊,好吧,有这个想法:(
-
已经想到了……Valgrind 看起来很酷……在 Linux 上时
-
如果它不是本机应用程序,它可能是一种选择;)
标签: c++ visual-studio-2012 memory-leaks