随笔 - 551, 文章 - 0, 评论 - 921, 引用 - 0
数据加载中……

讨论CString线程安全性问题(内存泄漏)

CString在线程处理中,稍有处理不当,极易引起内存泄漏。
让我们来看一个例子:
在线程函数中使用如下代码

CString strstate;    
strstate.Format(
"正在解密,请稍后... (共 %d 张地图)",p->m_countmap);

可以看到非常简单,在debug下,很容易看到如下的内存泄漏。



怎么回事?
先把修改好的代码放上来
CWin32Heap stringHeap( HEAP_NO_SERIALIZE, 00 );
CAtlStringMgr stringMgr( 
&stringHeap );
CString strstate(
&stringMgr );
strstate.Format(
"正在解密,请稍后... (共 %d 张地图)",p->m_countmap);
如上代码才具有线程安全性。

posted on 2008-07-10 11:31 AlanTop 阅读(4655) 评论(16)  编辑 收藏 引用 所属分类: VC++

评论

# re: 讨论CString线程安全性问题(内存泄漏)[未登录]  回复  更多评论   


多谢

我也发现过类似的问题
2008-07-10 15:10 | 我要去桂林

# re: 讨论CString线程安全性问题(内存泄漏)  回复  更多评论   

那stl的string和stringstream有这样的问题吗?
2008-07-10 15:59 | 紫夜苍狼

# re: 讨论CString线程安全性问题(内存泄漏)  回复  更多评论   

也碰到过,CString确实不是线程安全的,会泄露
2008-07-10 21:36 | tmp

# re: 讨论CString线程安全性问题(内存泄漏)  回复  更多评论   

这个好像不是CString的问题吧。这个泄漏可能与使用不当有关,可能是前面的CString溢出造成的。当然我也是猜测的。
2008-07-11 10:02 | 更深的蓝

# re: 讨论CString线程安全性问题(内存泄漏)  回复  更多评论   

给你一个肯定的答复,猜想错误,前面没有用到CString。
2008-07-11 11:37 | AlanTop

# re: 讨论CString线程安全性问题(内存泄漏)  回复  更多评论   

没有遇到过,你是多少个线程访问这个CString 对象?
2008-07-11 17:44 | 123

# re: 讨论CString线程安全性问题(内存泄漏)  回复  更多评论   

测试了下,没有遇到过这类问题.MFC7.1
2008-07-11 17:49 | 123

# re: 讨论CString线程安全性问题(内存泄漏)  回复  更多评论   

最好多换几个平台试试,VC6.0确实BUGER比较多
2008-07-11 22:45 | Herb

# re: 讨论CString线程安全性问题(内存泄漏)  回复  更多评论   

这个和平台无关,是线程安全性问题。测试平台是vc2005.
2008-07-11 22:58 | AlanTop

# re: 讨论CString线程安全性问题(内存泄漏)  回复  更多评论   

请证明与线程有关
2008-07-13 08:48 | mfc

# re: 讨论CString线程安全性问题(内存泄漏)[未登录]  回复  更多评论   

提供给你一种方法:你把示例代码放在线程里和不在线程里分别查看,对比即可得知。
2008-07-13 13:21 | alantop

# re: 讨论CString线程安全性问题(内存泄漏)[未登录]  回复  更多评论   

@alantop
请保证线程正常退出
2010-04-23 16:55 | 无名

# re: 讨论CString线程安全性问题(内存泄漏)[未登录]  回复  更多评论   

对象没销毁,当然内存泄漏啦,线程正常退出CString对象会自动析构就不会有泄漏了
2010-04-23 16:58 | 无名

# re: 讨论CString线程安全性问题(内存泄漏)[未登录]  回复  更多评论   

已测试证明,子线程正常退出CString是不会泄漏的。
2010-04-23 16:59 | 无名

# re: 讨论CString线程安全性问题(内存泄漏)  回复  更多评论   

lz写了什么自己估计也不清楚吧
2011-07-01 17:29 | lgh

# re: 讨论CString线程安全性问题(内存泄漏)  回复  更多评论   

楼主给力,解决了我的问题
2013-02-25 08:58 | mr.cheng

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理