CString也会内存泄漏吗?

tj_aj 2005-07-10 02:52:02
我用BoundChecker查到strcore.cpp的函数:
void CString::AllocBuffer(int nLen)
中这里有内存泄漏:
pData = (CStringData*)
new BYTE[sizeof(CStringData) + (nLen+1)*sizeof(TCHAR)];

现在搞不清楚是我程序哪里导致出现这个泄漏的,根据上面的信息能大概知道是什么样的地方导致内存泄漏吗?
...全文
975 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
tj_aj 2005-07-12
  • 打赏
  • 举报
回复
pData是微软的代码。
没用active控件,就是比较复杂的dll调用而已。
感觉就象是微软的bug一样。。。。。

ddgfei 2005-07-12
  • 打赏
  • 举报
回复
你是否用到了ActiveX这样得控件?当你向LPCTSTR这些参数中传递时有可能出现内存泄漏!!
还有,你得pData 是怎么删除得?
tj_aj 2005-07-12
  • 打赏
  • 举报
回复
怎么把下面这句中的 "_InspectionEngineAVPluginMutex" 代替啊?


CQuarAVPlugin::CQuarAVPlugin()
: m_mutexLock(FALSE, "_InspectionEngineAVPluginMutex", NULL)
ddgfei 2005-07-12
  • 打赏
  • 举报
回复
提醒你,最好是找出来,以前碰到过类似得问题,
当时由于没有理会她,但在使用其它得CString 时,有可能会出现默认赋值,
例如CString str;察看str时发现内部有数据,所以都需要做str.Format操作
tj_aj 2005-07-11
  • 打赏
  • 举报
回复
我没有用GetBuffer,

只用了GetBufferSetLength。而且也记得release,但是这个函数似乎无所谓用不用release了。不用一样!
handsomerun 2005-07-11
  • 打赏
  • 举报
回复
我用cstring,用到过内存泄漏的,
印象很深,

那次是我同事写的一个函数,函数的行参是什么我不记得了,我用cstring做实参就泄漏了
用char数组就可以了,呵呵,后来也没仔细研究,

还有,就是用了getbuffer以后没有release,也要泄哦~~~~~~~~
tj_aj 2005-07-11
  • 打赏
  • 举报
回复
现在还有一个不知道怎么改,还是存在一点泄漏!

CQuarAVPlugin::CQuarAVPlugin()
: m_mutexLock(FALSE, "_InspectionEngineAVPluginMutex", NULL)

竟然"_InspectionEngineAVPluginMutex"这块内存也会泄漏!
前面发出的
strcore.cpp(118) : {295} normal block at 0x01AF43A0, 47 bytes long.
Data: < _Ins> 01 00 00 00 1E 00 00 00 1E 00 00 00 5F 49 6E 73
就指的是这快了。

其它地方是把类成员变量为CString的改为char[512]就好了。
tj_aj 2005-07-11
  • 打赏
  • 举报
回复
调查了2天,发现很怪异,CString作为类成员变量,在成员函数内部进行了一些操作,就可能内存泄漏。

一般的确不会泄漏,我试了很多种情况,都好好的,但因为我用了dll,而且export的不是类成员函数,而是全局函数,要全局函数来new 类对象,释放对象。 这种情况下,那个类的成员变量CString就出现问题。

现在把CString 改为char[]就没有问题了。

到现在都想不通为什么 。
hxzb7215191 2005-07-10
  • 打赏
  • 举报
回复
这个是要留意一下的.
hxzb7215191 2005-07-10
  • 打赏
  • 举报
回复
CString::GetBuffer没有CString ::ReleaseBuffer
tj_aj 2005-07-10
  • 打赏
  • 举报
回复
strcore.cpp的118行就是我上面说的那句:
pData = (CStringData*)
new BYTE[sizeof(CStringData) + (nLen+1)*sizeof(TCHAR)];
tj_aj 2005-07-10
  • 打赏
  • 举报
回复
Detected memory leaks!
Dumping objects ->
strcore.cpp(118) : {321} normal block at 0x01AF3800, 38 bytes long.
Data: < 005> 01 00 00 00 00 00 00 00 15 00 00 00 00 30 30 35
strcore.cpp(118) : {304} normal block at 0x01AF4230, 65 bytes long.
Data: < 0 :\D> 01 00 00 00 00 00 00 00 30 00 00 00 00 3A 5C 44
strcore.cpp(118) : {295} normal block at 0x01AF43A0, 47 bytes long.
Data: < _Ins> 01 00 00 00 1E 00 00 00 1E 00 00 00 5F 49 6E 73
strcore.cpp(118) : {235} normal block at 0x01AF3790, 38 bytes long.
Data: < 005> 01 00 00 00 00 00 00 00 15 00 00 00 00 30 30 35
strcore.cpp(118) : {212} normal block at 0x01AF36C0, 68 bytes long.
Data: < 3 :\D> 01 00 00 00 00 00 00 00 33 00 00 00 00 3A 5C 44
strcore.cpp(118) : {203} normal block at 0x01AF38B0, 50 bytes long.
Data: < ! ! _Ins> 01 00 00 00 21 00 00 00 21 00 00 00 5F 49 6E 73
Object dump complete.
eeixy2000 2005-07-10
  • 打赏
  • 举报
回复
首先,这不是CString的问题!
原因应该是你在使用一个CString字符串时,程序退出时没有来得及释放造成的。
在Debug模式下,看看最终的Output窗口中你会发现是在哪里造成该错误的!
tj_aj 2005-07-10
  • 打赏
  • 举报
回复
有什么工具可以查到我的程序处内存泄漏,而不是微软的代码中内存泄漏的?
tj_aj 2005-07-10
  • 打赏
  • 举报
回复
我里面好像根本没有用到new CString

我都不知道是不是CString导致的。
goodboyws 2005-07-10
  • 打赏
  • 举报
回复
有没有这样的代码
CString pStr = new CString;
.....
if (flag == 0)
pStr = pStrA;
......
delete pStr;
goodboyws 2005-07-10
  • 打赏
  • 举报
回复
一般是new CString 没有 delete
或者new CSring[10], 没有用delete[]
再有就是某些对象来不及析构程序就退出了
王国凡 2005-07-10
  • 打赏
  • 举报
回复
可能是你哪儿用到了 CString 需要手动释放, 却没有放.
举例:
CString s( "abcd" );
LPTSTR p = s.GetBuffer( 10 );
// s.ReleaseBuffer( ); 需要手动释放却忘了写 ReleaseBuffer 了 .
tj_aj 2005-07-10
  • 打赏
  • 举报
回复
整个程序只查到了GetBufferSetLength,没查到GetBuffer();
所以应该不是上面这个问题了。
truewill 2005-07-10
  • 打赏
  • 举报
回复
会不会是你用CString::GetBuffer没有CString ::ReleaseBuffer
加载更多回复(1)

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧