关于ExitInstance不执行,导致很多内存泄漏的问题

来源:互联网 发布:迪拜 知乎 编辑:程序博客网 时间:2024/05/22 05:06

        昨天在编程过程中,突然某一次退出程序时,看了一相DebugView,发现竟然有这么多内存泄漏,大概100把条的样子,吓得我大汗长流.

        要看信息.  多出在 strcore.cpp, 还有一些 afxtoolbar.cpp  afxmenubar.cpp等等,全是MFC里的东西. 也有一些指向

       IMPLEMENT_DYNCREATE 宏,还有就是InitInstance中的pDocTemplate = new CSingleDocTemplate.

  并且在线程退出时,会提示.

The thread 0xBD8 has exited with code 3 (0x3).
在程序退出时执行不到ExitInstance中.
本来遇到内存泄漏,应该先查所有的new,但这些new没一个是自己写的,都是MFC向导生成的,释放应该不用我管.
然后就只有求助网络了.
百度,google了一会.得到以下几种可能性.
1. 某个地方调用了强制结束主线程的代码,使得线程没有正常终止,也就没有执行内存释放的代码了
2. 某个地方在释放内存时导致异常退出.
由于我确定自己没有使用强制结束线程的代码.所以第一种可能性排除了.
我就查第二种,然后在每个类的 析构函数中下断点,看是否在退出时都会进入.
果然,有一些类的析构函数没有被执行.问题找到了. 
发现自己在一个类的析构函数中调用了一个KillTimer函数,都不知道当时是怎么想的.删除了,一切恢复正常,再也没有内存泄漏了.
小结:
如果遇到内存非自己代码中泄漏,
1. 检查有无线程和线程是否会正常终止.,
2.再检查每个类的析构函数,主要检查自己编写的类的析构函数以及自己动过的其它类的析构函数,看是否能正常析构,或者注释后能不能正常工作.

原创粉丝点击