MFCButton Memory leak(内存泄露问题)

http://m.blog.csdn.net/blog/haoekin/8851219

1.无法显示右边箭头的问题

无论怎么折腾都没显示不出来,微软给的示例又能显示,度娘和谷歌也都不知道,经过不断地探索总算找到解决办法了:在rc2文件中加上下面的内容即可

#ifndef _AFXDLL
#include "afxribbon.rc"      // Ribbon and control bars
#endif

当然,要想按钮有XP的风格,还需要在App类的InitInstance中加上

CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));

然而这样在关闭程序时会发现有内存泄漏,输出窗口中出现如下内容:

Init CriticalSection spin count CDLPShareMemConfig::Close()CDLPShareMemConfig::Close()TSWebDownLoadProtect.dll is Load failedTSWebMon.dat is Load failedDetected memory leaks!
Dumping objects ->
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\afxvisualmanagerwindows.cpp(35) : {487} client block at 0x001C9318, subtype c0, 376 bytes long.
a CMFCVisualManagerWindows object at $001C9318, 376 bytes long
Object dump complete.

显然,这是由于RUNTIME_CLASS(CMFCVisualManagerWindows)动态创建了一个CMFCVisualManagerWindows的实例没有释放,不知道CMFCVisualManager在搞什么,在吃SHI吗,还需要我们手动释放,既然它不作为,那我们只有自己干了,在ExitInstance中加上CMFCVisualManagerWindows::DestroyInstance();就好了

2. 多字节编码下堆破坏

如果你建的项目是使用的Unicode编码,那么在Debug模式下没有问题,Release模式下同样会出现堆破坏的错误,程序根本没法启动!如果是多字节编码,那么对不起,任何模式都不行,不知道MFC怎么搞的!

没办法,总得知道原因出在哪里吧,找到MFC的源码(源码怎么找相信大家都知道,就在VS安装目录下\VC\atlmfc\src\mfc下面,查找包含CMFCMenuButton字符串的文件,怎么搜索不用我说了吧,在Win7下改一下搜索选项就可以了),在OnDraw里面打断点,发现问题出在CMFCButton::OnDraw那一行,继续调CMFCButton::OnDraw,发现问题出在GetWindowText,用一个大一点的缓冲区来存获得的文本吧,发现文本后面被填入了"\0 MFCMenuButton",乖乖,多出这么长一截,堆能不被破坏吗?

解决办法有两个:

(1)重载CMFCMenuButton,自己实现OnDraw(可以将CMFCButton和CMFCMenuButton的OnDraw合并起来),在GetWindowText那里自己分配一个大一点的缓冲区就行了;这种办法太笨拙了,不推荐。

(2)不写任何代码,直接将Button控件拖入到对话框中,添加变量时变量类型改成CMFCMenuButton就可以了,只不过需要自己设置按钮的一些属性。

好了,就这么多,如果谁有更好的解决办法请指教!

http://blog.csdn.net/polytechnic/article/details/5698397

本来应该不会有这篇四的,但因为发现了 bug,所以要 patch 一下。

之前那个程序,退出的时候提示内存泄漏。

Detected memory leaks!
Dumping objects ->
f:/dd/vctools/vc7libs/ship/atlmfc/src/mfc/afxvisualmanagerwindows.cpp(35) : {664} client block at 0x02BE30D8, subtype c0, 376 bytes long.
a CMFCVisualManagerWindows object at $02BE30D8, 376 bytes long
Object dump complete.

这是 CMFCVisualManagerWindows 的问题了。

解决方法:

把:      CMFCVisualManager ::SetDefaultManager (RUNTIME_CLASS (CMFCVisualManagerWindows ));

替换成:CMFCVisualManager ::SetDefaultManager (RUNTIME_CLASS (CMFCVisualManagerWindows7 ));

至于原因嘛,暂时还不知道。难道这是 MFC 的 bug ?

posted on 2015-10-16 17:38 kernel_main 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/kernel0815/p/4885904.html

MFCButton Memory leak(内存泄露问题)相关推荐

  1. DTrace memory leak 内存泄露

    http://blog.sina.com.cn/s/blog_538040b70100eecn.html 如下程序用于跟踪,在分配和回收都会触发探针 #!/usr/sbin/dtrace -s pid ...

  2. iOS_Memory Leak 内存泄露治理

    文章目录 1.内存分类 2.Memory Report 3.Analyze 4.Leaks 4.1.前置设置 4.2.页面介绍 4.3.使用 4.3.1.Leaks 页面 4.3.2.Cycles & ...

  3. Go内存溢出与内存泄露

    https://www.cnblogs.com/sunsky303/p/11077030.html 一.内存泄露与内存溢出的区别 内存溢出(out of memory,简称OOM) 内存溢出是指程序在 ...

  4. java 多线程 内存泄露_关于内存泄露的总结

    大致先分为五个小模块: 1.什么是内存泄漏 2.有哪些情况会导致内存泄漏切如何解决 3.如何检测内存泄漏 4.Java得基本数据类型和占用字节 5.什么是内存溢出和解决办法 一.什么是内存泄漏(Mem ...

  5. jvm故障 内存泄露和内存溢出总结

    目录 内存泄漏memory leak 内存泄漏的分类(按发生方式来分类) 内存泄露的场景 静态集合类 / 长生命周期的对象持有短生命周期对象的引用 / 单例模式 /类加载器 各种连接,如数据库连接.网 ...

  6. SQL Server 内存泄露(memory leak)——游标导致的内存问题

    原文:SQL Server 内存泄露(memory leak)--游标导致的内存问题 转自:http://blogs.msdn.com/b/apgcdsd/archive/2011/07/01/sql ...

  7. 性能优化之内存泄露(Memory Leak)常用分析工具(另3种)

    1 LeakCanary(最常用,能监控整个App内存泄漏情况) 1.1 使用LeakCanary // 仅在debug包启用LeakCanary debugImplementation 'com.s ...

  8. linux pmap 内存泄露,pmap学习:系统测试中怎么确定内存泄露(memory leak)

    性能测试的一项重要工作就是检查有没有内存泄露.linux下通过top/free/pmap/ps,会提供许多关于内存分配的信息,如top里面的VIRT,RSS,SWAP,VSZ,RES,SHR等等,到底 ...

  9. 什么是内存溢出(Out Of Memory---OOM)和内存泄露 (Memory Leak)

    1.内存溢出:(Out Of Memory---OOM) 系统已经不能再分配出你所需要的空间,比如系统现在只有1G的空间,但是你偏偏要2个G空间,这就叫内存溢出 例子:一个盘子用尽各种方法只能装4个果 ...

最新文章

  1. python logging模块的作用_Python 日志模块logging分析及使用-2
  2. The way to Go(6): Go程序的基本结构和要素
  3. css实现图片自适应容器的几种方式
  4. sqlyog怎么连接mysql_Mysql数据库连接过高,怎么快速杀掉连接
  5. js blob 下载到本地文件
  6. Centos 搭建activemq
  7. CrystalDiskInfo的下载使用
  8. 我为什么选择Angular 2?
  9. 【渝粤题库】陕西师范大学202311金融机构管理Ⅰ作业(高起专)
  10. ADODB.Stream 错误 '800a0bbc' 写入文件失败
  11. 深度学习双显卡配置_gpu – 我可以在笔记本电脑上使用intel高清显卡实现深度学习模型...
  12. LeetCode精选101刷题必备(C++)-附详细分类及解体说明
  13. Neural Summarization by Extracting Sentences and Words
  14. 网络直播平台近些年发展
  15. unityshader 晶格化消散
  16. 真正的自由是节制欲望自律简朴地去生活
  17. python爬虫个人学习笔记
  18. 500 G JAVA视频网盘分享
  19. 计算机专业开题报告英文版,计算机专业开题报告范文样本(计算机专业论文开题报告范文)...
  20. 最初计算机研制时间科学家,美科学家研制“时间晶体”超越宇宙寿命 类似永动机...

热门文章

  1. Flutter Icons 与 CupertinoIcons 的不一样的体验
  2. Mybatis中查询结果resultMap使用分析
  3. Unix高级环境编程
  4. [网络流24题] 最长递增子序列
  5. 剑指offer(7)斐波那契数列
  6. Codeforces686C【dfs】
  7. Oracle AWR ASH
  8. 媒体查询-响应式布局-BFC
  9. 7-138 打印沙漏 (20 分)
  10. python开发讲解_Python开发系列课程(1) - 初识Python详解