从来不写技术文章,因为没办法描述清楚观点。我一直认为,无法向别人解释清楚为什么的原因,一定在于自己还不是彻底地理解。拿出来说,不异于害人害已。这两天弄一个mfc的小程序,出了点问题,google了下,也只有提问的没找到回答。

   其实对于mfc,在其快老掉牙时,因为日常不怎么用,也始终是一知半解。就当下山来害回人吧。
  现象:vs2005新建一个console的程序,并调用AfxSocketInit(),会有memory leak. leak 的出处是sockcore.cpp中的
         #ifndef_AFXDLL
                      pThreadState->m_pmapSocketHandle =new CMapPtrToPtr;
                      pThreadState->m_pmapDeadSockets =new CMapPtrToPtr;
                       pThreadState->m_plistSocketNotifications= new CPtrList;
          #endif
   很明显这个问题只会在使用静态mfc库链接时才会发生。事实上这三块空间会在afxstate.cpp中的~AFX_MODULE_THREAD_STATE()中被删除,只是这个析构也没被调用。
    本来这个析构应该是被appmodul.cpp中的_AfxTermAppState()函数调用,这个函数也是只有在静态链接mfc库时才会被调用,因为它只有在
         #fndef _AFXDLL
                       char _afxInitAppState = (char)(AfxInitialize(FALSE, _MFC_VER),atexit(&_AfxTermAppState));
          #else
                       char _afxInitAppState = (char)(AfxInitialize(FALSE,_MFC_VER));
           #endif
时才会在程序结束时调用。
     出问题的就在_afxInitAppState,在console程序中它不会被调用,而在windows程序中才会被调用。应该在项目属性中哪里可以设置。_afxInitAppState应该是这个函数列表里的一项__xc_a ~__xc_z,他们是在进入_tmain()之前被调用的初始化函数表,但在mfc的source里无法找到它们的定义,是被extern进来的。
   好,下面就是出问题的顺序,因为初始化列表__xc_a~__xc_z中没有_afxInitAppState,使得程序离开时_AfxTermAppState无法被调用,也就使AFX_MODULE_THREAD_STATE没被析构,所以三块内存没被析构。可能是微软认国在console程序下_afxInitAppState是不需要被调用的。
     目前解决的方案是在序退出前加上
         #fndef _AFXDLL
                         AfxTermLocalData(NULL, TRUE);
         #endif
是不是有其它问题不得而知,因为,对mfc的一知半解

http://blog.sina.com.cn/s/blog_458f3c010100n4st.html相关推荐

  1. http://blog.sina.com.cn/s/blog_5bd6b4510101585x.html

    http://blog.sina.com.cn/s/blog_5bd6b4510101585x.html 转载于:https://www.cnblogs.com/longshiyVip/p/59333 ...

  2. http://blog.sina.com.cn/s/blog_6145ed810102vr8k.html

    http://blog.sina.com.cn/s/blog_6145ed810102vr8k.html 转载于:https://www.cnblogs.com/toSeeMyDream/p/5801 ...

  3. http://blog.sina.com.cn/s/blog_4aae007d0100inxi.html

    http://blog.sina.com.cn/s/blog_4aae007d0100inxi.html 转载于:https://www.cnblogs.com/qxql2016/p/4693885. ...

  4. http://blog.sina.com.cn/s/blog_5007d1b10100ltwh.html

    http://blog.sina.com.cn/s/blog_5007d1b10100ltwh.html

  5. http://blog.sina.com.cn/s/blog_6364150101018hby.html

    http://blog.sina.com.cn/s/blog_6364150101018hby.html

  6. http://blog.sina.com.cn/s/blog_5da93c8f0102w86x.html

    转至:http://blog.sina.com.cn/s/blog_5da93c8f0102w86x.html 参考:http://droidyue.com/blog/2015/04/12/avoid ...

  7. http://blog.sina.com.cn/s/blog_49867dc00100zj7t.html

    http://blog.sina.com.cn/s/blog_49867dc00100zj7t.html JSON-lib框架,转换JSON.XML不再困难 Json-lib可以将Java对象转成js ...

  8. 我在新浪的微博: http://blog.sina.com.cn/wenxy1

    我在新浪的微博: http://blog.sina.com.cn/wenxy1 从今以后, 技术性文章在CSDN发布, 生活见闻在sina微博发布,不知道CSDN和sina的微博可不可以同步?

  9. Get more...go to my another blog...http://blog.sina.com.cn/qqlove163

    Get more...go to my another blog...http://blog.sina.com.cn/qqlove163

最新文章

  1. 《Got Git》学习笔记(一)
  2. HDU 1026 Ignatius and the Princess I 迷宫范围内的搜索剪枝问题
  3. 架构 php_十年PHP架构师的成长之路,程序员必备
  4. linux sort 时间排序,linux sort多字段排序实例解析
  5. java中的slave_java – Jenkins slave在构建过程中脱机
  6. 怎么证明会python_如何在python中验证SSL证书?
  7. android分辨率 x y,Android - 确定不同分辨率的位图上的特定位置(X,Y坐标)?
  8. C++阶段02笔记【通讯录管理系统 完整代码(系统需求、创建项目、添加/显示/删除/查找/修改/清空)】
  9. 下载人脸认证助手_关于微信人脸解封验证失败方法
  10. mac怎么设置默认浏览器 mac默认浏览器设置方法
  11. 盘点Greenplum 6.0六大新特性及展望
  12. 使用Lua 局部变量来优化性能,同一时候比較局部变量和全局变量
  13. foremost的下载安装使用说明
  14. 计算机图形学设计线宽代码,计算机图形学画圆并改变线宽.pdf
  15. 彬彬股份牵手正极技术巨头 服装转型锂电
  16. 学计算机的ctrl,学会这些电脑快捷键,瞬间成为电脑高手
  17. 物理 Standby <-> Snapshot Standby
  18. vue项目中使用a标签下载视频文件
  19. html使用手机默认字体,开发移动端H5的时候,字体该不该随着手机系统字体的调整而变化?...
  20. GPU加速的QT5.6.0交叉编译到4412

热门文章

  1. 华为鸿蒙15日上市,华为鸿蒙什么时候上市
  2. mysql组件化_组件化开发和模块化开发概念辨析
  3. AI开发者大会之计算机视觉技术实践与应用:2020年7月3日《如何利用计算机视觉增加便利店连锁每日销售额》、《基于图像 / 视频的人脸和人体分析基础技术及其应用介绍》
  4. AI:2020年6月22日北京智源大会演讲分享之09:00-09:50 全体大会《AI精度与隐私的博弈》
  5. 成功解决SyntaxError: import * only allowed at module level
  6. 成功解决(Win32): 已加载“C:\Windows\SysWOW64\ntdll.dll”。无法查找或打开 PDB 文件。
  7. 成功解决TypeError: 'float' object cannot be interpreted as an integer
  8. VM之Linux:Linux的Ubuntu中,解决安装后屏幕太小的问题
  9. OS_CORE.C(2)
  10. TextView SpannableString 使用之实现可点击超链接效果