内存泄露CDynLinkLibrary

chiweiyong 2014-11-12 05:52:45
自己建了一个MFC窗口控件类,在一个对话框工程中创建类对象,并显示窗口。但发现有多处内存泄露,主要的就是每次创建该窗口并显示的时候,就会出现这样的内存泄露:
Dumping objects ->
{68} client block at 0x01EA1EF0, subtype c0, 64 bytes long.
a CDynLinkLibrary object at $01EA1EF0, 64 bytes long
主要的问题貌似就是”CDynLinkLibrary“,但自己不是很清楚这样的问题,请各位前辈指教。
...全文
356 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
shenyi0106 2014-11-13
  • 打赏
  • 举报
回复
FreeLibrary
jianghandaxue 2014-11-13
  • 打赏
  • 举报
回复
查查哪些资源没有释放,你说在创建时有泄露,重点这个逻辑里面排除
shen_wei 2014-11-13
  • 打赏
  • 举报
回复
看你类对象 ,有哪些资源没有释放。。。
chiweiyong 2014-11-13
  • 打赏
  • 举报
回复
在网上看到一条解答,原文如下: 最近 Perry 在写一个简单的插件系统框架,需要有 n 多动态链接库加载来加载去的。调试时偶然发现提示在 dllmodul.cpp 中会报告若干个跟 CDynLinkLibrary 相关的内存泄漏。错误信息具体看起来大概是这个样子: Detected memory leaks! Dumping objects -> ...\atlmfc\src\mfc\dllmodul.cpp(133) : {410} client block at 0x05A919F8, subtype c0, 64 bytes long. a CDynLinkLibrary object at $05A919F8, 64 bytes long a CDynLinkLibrary object at $05A919F8, 64 bytes long {405} client block at 0x05A93F28, subtype c0, 64 bytes long. a CDynLinkLibrary object at $05A93F28, 64 bytes long a CDynLinkLibrary object at $05A93F28, 64 bytes long {65} client block at 0x002C2C90, subtype c0, 64 bytes long. a CDynLinkLibrary object at $002C2C90, 64 bytes long a CDynLinkLibrary object at $002C2C90, 64 bytes long Object dump complete. 着实让人摸不着头脑。无奈求助 Google,结果搜到了 MS 的 KB 167929 专门说这个的,另有一个机器翻译的中文版,不过译的实在惨不忍睹,还是看英文的靠谱些…… 首先最重要的一点是,这个内存泄漏是误报,所以大可以不去管它。究其原因,是 MFC 程序加载 MFC DLL(或非 MFC 程序加载了多个 MFC DLL)时,并且这些模块都是共享 MFC 的运行时库(即链接时启用了“Use MFC in a Shared DLL”),但是它们又需要加载不同版本的 MFC 运行时库的情况下,不同版本的 MFC 运行时库分别管理各自的状态,因此造成内存中存在多个 MFC 的状态拷贝,本来这种情况其实是正常的,但调试器会误以为发生了错误。 一个典型的造成这种误报发生的情况就是有些模块要求加载 ANSI (MBCS) 版本的 MFC DLL,而另一些要求 Unicode 版本的 MFC DLL。在 Visual Studio 2005 中,默认的 C++ 工程是 Unicode 的,但有时为了考虑对 Win9x 系统的兼容性,往往会改成 MBCS 编译,和其他模块组合时就可能会造成版本不一致。 尽管 MS 已经明确了这是个误报,却仍然宣称这是 by design 的,不会改正。如果不是自己写的 DLL 无法修改的话,基本是没有办法避免这个烦人的误报了。另外,KB 167929 里给出了一个其实没什么用的补救措施:在模块卸载时输出分隔调试信息以便于将误报与真正的内存泄漏区分出来。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧