今天用到 VS2010 的新控件 CMFCLinkCtrl,自己重写了一下,发现有内存泄露!
以为自己的实现中有什么问题,但看了半天也没看出什么问题。
于是重建了一个测试工程,工程是基于对话框的,里面放了一个 CMFCLinkCtrl,其他什么也没做,
编译、运行、退出,一切正常。
然后给这个控件关联了一个变量,CMFCLinkCtrl _LinkCtrl; 其他什么也没动。
编译、运行、退出,提示有内存泄露:Detected memory leaks!
Dumping objects ->
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\plex.cpp(29) : {364} normal block at 0x0066E7A0, 164 bytes long.
Data: < V> 00 00 00 00 00 00 00 00 C5 9D 1C 81 98 CF A0 56
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\map_sp.cpp(83) : {363} normal block at 0x0066A330, 68 bytes long.
Data: < f > 00 00 00 00 A4 E7 66 00 00 00 00 00 00 00 00 00
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\afxtooltipmanager.cpp(70) : {362} client block at 0x0066A628, subtype c0, 144 bytes long.
a CToolTipCtrl object at $0066A628, 144 bytes long
Object dump complete.这个..... 是微软的控件有问题还是我的用法有问题?
以为自己的实现中有什么问题,但看了半天也没看出什么问题。
于是重建了一个测试工程,工程是基于对话框的,里面放了一个 CMFCLinkCtrl,其他什么也没做,
编译、运行、退出,一切正常。
然后给这个控件关联了一个变量,CMFCLinkCtrl _LinkCtrl; 其他什么也没动。
编译、运行、退出,提示有内存泄露:Detected memory leaks!
Dumping objects ->
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\plex.cpp(29) : {364} normal block at 0x0066E7A0, 164 bytes long.
Data: < V> 00 00 00 00 00 00 00 00 C5 9D 1C 81 98 CF A0 56
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\map_sp.cpp(83) : {363} normal block at 0x0066A330, 68 bytes long.
Data: < f > 00 00 00 00 A4 E7 66 00 00 00 00 00 00 00 00 00
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\afxtooltipmanager.cpp(70) : {362} client block at 0x0066A628, subtype c0, 144 bytes long.
a CToolTipCtrl object at $0066A628, 144 bytes long
Object dump complete.这个..... 是微软的控件有问题还是我的用法有问题?
我就做三件事情:
1. 创建一个基于对话框的应用程序
2. 给对话框上拖一个 MFCLinkCtrl
3. 给这个控件关联一个 CMFCLinkCtrl 的变量仅这三步不会有什么问题吧?
而且这个 MFCLinkCtrl 是 VS2010 新增的,以前没用过,所以不知道哪里有错
看看msdn对这个控件的描述,在搜搜这个控件,看看别人咋说
{
delete CMFCVisualManager::GetInstance();
}
不行呀,我在 OnDestroy 和 对话框的析构函数中都试过这个代码,泄露依然有.....
你确信这个代码执行了? 重新build下。 绝对可以
搜到一个同样有内存泄露的问题....
http://topic.csdn.net/u/20100731/23/eda43aeb-68df-4b61-ba41-461c118e77f8.html
大哥呀,我重新建了个工程,把代码加到 dlg 的析构函数中,设置断点,跟了一下,代码确实运行了,
但是内存泄露还在呀....
你重新建立个工程,什么都不要动, 拖个cmfclinkctrl ,然后运行下,看是否还有? 如果有, 发email给我,记着把debug信息都删除掉。[email protected]
只拖一个 MFCLinkCtrl 控件进去是没有问题的,但是关联一个 CMFCLinkCtrl 变量就会出现内存泄露...
我确认了, 解决方法如下:
你拖动个Button,然后关联CMFCLinkCtrl的变量就没问题了。
然后正常关闭程序输出窗口就有以下信息The thread 'Win32 Thread' (0x1494) has exited with code 2 (0x2).
The program '[5540] t.exe: Native' has exited with code 2 (0x2).
t.exe 是工程输出文件的文件名....这算是程序不正常退出吧,然后安装一个检测内存漏洞的vc插件,就说有内存泄漏
大哥呀,你说的代码:if (CMFCVisualManager::GetInstance() != NULL)
{
delete CMFCVisualManager::GetInstance();
}我试了问题没有解决,还是有内存泄露呀!
我给你的邮件里发的工程你看了没有? 没有内存泄露吗? 我这里明明还是有的!
kao....没看见我18楼给你的回复。