VC6当用_beginthread建立的线程中使用了cstring,但结束线程时使用_endthread()则会出现内存泄露,如果改成return结束线程,则cstring内存泄露得到解决
---------------以下内容为转载----------------
我以前也遇到过这个问题。后阅读分析了MFC的CString源码后,已经解惑。共大家分享: 在VC++6中,CString 的拷贝构造函数没有使用内存分配,而是使用的引用,它内部保存了一个引用的计数器(这是错误的根源,MFC还有很多BUG那,以后有时间给大家介绍)。 比如: 另外,它分配内存的方法是4字节对齐的64字节的倍数+sizeof(内部结构)(超过64的时候)。 在多数情况下,比较简单的使用过程中,MFC的这个BUG不会发作,也就是不会有内存泄露。那什么时候CString会暴露出BUG那? VC++7(.NET) 中,MFC彻底修改了CString,把它写成了CStringT形式的模板类。它有没有BUG,目前我还不太清楚。 ----------------------- CString在线程处理中,稍有处理不当,极易引起内存泄漏。 ![]() ![]() 可以看到非常简单,在debug下,很容易看到如下的内存泄漏。 ![]() 怎么回事? 先把修改好的代码放上来 ![]() ![]() ![]() ![]()
======================================================================
CString m_XUN;
m_XUN=""; m_XUN.Empty();//这一句话就可以了,费了我不少痛苦的表情 //晕倒,在debug下运行的程序没有问题,但在release下当退出的时候出现了问题,找来找去还是对CString赋值 的问题,现在正解决中.... |