今天用到 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.这个.....  是微软的控件有问题还是我的用法有问题?

解决方案 »

  1.   

    先找自己的原因,MFC都用了那么多年了,要有问题,估计也轮不到你提出来
      

  2.   


    我就做三件事情:
    1. 创建一个基于对话框的应用程序
    2. 给对话框上拖一个 MFCLinkCtrl
    3. 给这个控件关联一个 CMFCLinkCtrl 的变量仅这三步不会有什么问题吧?
    而且这个 MFCLinkCtrl 是 VS2010 新增的,以前没用过,所以不知道哪里有错
      

  3.   

    还在用6.0,偶尔用用2005........
    看看msdn对这个控件的描述,在搜搜这个控件,看看别人咋说
      

  4.   

    要手动删除。 把以下代码放到你的dlg的析构或者Onclose等类似退出的函数里, 只放一次。if (CMFCVisualManager::GetInstance() != NULL)
    {
    delete CMFCVisualManager::GetInstance();
    }
      

  5.   


    不行呀,我在 OnDestroy 和 对话框的析构函数中都试过这个代码,泄露依然有.....
      

  6.   


    你确信这个代码执行了? 重新build下。 绝对可以
      

  7.   


    搜到一个同样有内存泄露的问题....
    http://topic.csdn.net/u/20100731/23/eda43aeb-68df-4b61-ba41-461c118e77f8.html
      

  8.   


    大哥呀,我重新建了个工程,把代码加到 dlg 的析构函数中,设置断点,跟了一下,代码确实运行了,
    但是内存泄露还在呀....
      

  9.   


    你重新建立个工程,什么都不要动, 拖个cmfclinkctrl ,然后运行下,看是否还有? 如果有, 发email给我,记着把debug信息都删除掉。[email protected]
      

  10.   


    只拖一个 MFCLinkCtrl 控件进去是没有问题的,但是关联一个 CMFCLinkCtrl 变量就会出现内存泄露...
      

  11.   


    我确认了, 解决方法如下:
    你拖动个Button,然后关联CMFCLinkCtrl的变量就没问题了。
      

  12.   

    ....直接新建一个 CDialog工程,啥都不做,编译运行
    然后正常关闭程序输出窗口就有以下信息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插件,就说有内存泄漏
      

  13.   


    大哥呀,你说的代码:if (CMFCVisualManager::GetInstance() != NULL)
    {
        delete CMFCVisualManager::GetInstance();
    }我试了问题没有解决,还是有内存泄露呀!
    我给你的邮件里发的工程你看了没有?   没有内存泄露吗?    我这里明明还是有的!
      

  14.   


    kao....没看见我18楼给你的回复。