【发布时间】:2015-10-09 18:03:39
【问题描述】:
https://msdn.microsoft.com/en-us/library/x98tx3cf.aspx#NotExistJustToMakeTheAElementVisible
我正在使用上述站点来清除我的项目的内存泄漏,我终于能够消除一个困扰我一个多月的问题。
然而,当使用
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
指令并尝试根据内存分配数设置断点,使用
_crtBreakAlloc = 425;
例如,我没有得到断点。然而,我的调试输出显示:
'SMP.exe' (Win32): Unloaded 'C:\Windows\System32\winmm.dll'
The thread 0x2e90 has exited with code 0 (0x0).
Detected memory leaks!
Dumping objects ->
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\occcont.cpp(922) : {425} normal block at 0x0000000000725180, 24 bytes long.
Data: <R > 52 04 15 00 00 00 00 00 00 00 00 00 00 00 00 00
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\occcont.cpp(922) : {424} normal block at 0x0000000000725100, 24 bytes long.
Data: <, > 2C 04 1B 00 00 00 00 00 00 00 00 00 00 00 00 00
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\occcont.cpp(922) : {423} normal block at 0x0000000000725080, 24 bytes long.
Data: < I > BC 0C 49 00 00 00 00 00 00 00 00 00 00 00 00 00
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\occcont.cpp(922) : {422} normal block at 0x0000000000725000, 24 bytes long.
Data: <j > 6A 05 16 00 00 00 00 00 00 00 00 00 00 00 00 00
这些泄漏大约有 280 个,我没有将它们全部列出,但我无法使用上述命令在任何这些分配处设置断点。这种做法有助于消除我提到的其他内存泄漏,我确实修复了。
另外,FWIW,我不知道这个 occont.cpp 文件是什么,它在哪里,或者它对我的项目做了什么。
任何关于此事的信息/建议将不胜感激。谢谢!
【问题讨论】:
-
是否有可能消除所有“报告的”内存泄漏?我以前使用这些工具来查找大泄漏,但我不确定是否可以消除所有问题。
-
你知道,我也在想同样的事情......我没有使用 f:\ 驱动器上的任何文件,而且它们甚至出现在报告中是很神秘的。我不知道这些是否是真正的担忧。我之前已经处理了所有重大泄漏,现在我正在处理这些小问题
-
是的,“f:\dd\vctools\vc7libs\”中的任何内容都将成为 Visual Studio 或 Windows SDK 内容的一部分。因为内存调试器绝对拦截每一个内存分配,它很容易出现误报。也不建议注意程序退出时发现的“泄漏”,因为有很多东西没有“正确”清理,因为程序正在退出,而且无论如何它都会在几毫秒内没有实际意义。
-
" 也不建议注意程序退出时发现的“泄漏”——除非这些泄漏是由您的代码引起的,如果不修复它们可能会累积超时导致内存问题
标签: c++ visual-studio-2012 memory memory-leaks