CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

这个内存泄漏有点不可思议,有经验的进来看看。

楼主sboom(+-LingCh-+)(爱美人不爱VC)2005-07-03 11:28:24 在 VC/MFC / 基础类 提问

int   CBase::Connnect   ()  
  {  
  //Connect   to   Database  
  VARIANT   vAffected;  
  HRESULT   hr=0;  
  VariantInit(&vAffected);  
   
  //连接  
  CString   strConn;  
  strConn="Driver={SQL   Server};Server=127.0.0.1;Database=Face";  
  //hr=dbData.conn->Open   (strConn.GetBuffer   (),dbUser.GetBuffer   (),dbPass.GetBuffer   (),adConnectUnspecified);//<--这句出问题  
  //if(FAILED(hr))  
  // return   -1;  
  return   0;  
  }  
  /////////////////////////////////////////  
  上面那句连接的注释掉就没问题,不注释就内存泄漏,始终想不明白什么哪里泄漏了啊。。。  
  Detected   memory   leaks!  
  Dumping   objects   ->  
  {152}   normal   block   at   0x003E7C28,   17   bytes   long.  
    Data:   <     2|                         >   D8   9C   32   7C   00   00   00   00   00   00   00   00   01   00   00   00    
  {150}   normal   block   at   0x003E7B90,   17   bytes   long.  
    Data:   <     2|                         >   D8   9C   32   7C   00   00   00   00   00   00   00   00   01   00   00   00    
  Object   dump   complete. 问题点数:100、回复次数:15Top

1 楼moany(长枪大戟)回复于 2005-07-03 13:32:37 得分 10

是   因为没关闭吧?Top

2 楼roscoe(草上飞)回复于 2005-07-03 13:34:23 得分 10

不要用GetBuffer(),直接用(LPCTSTR)strConn|   strConn.GetString()   看你是那个版本  
  //  
  GetBuffer   必须是与ReleaseBuffer成对出现(VC6)Top

3 楼gooyan(超级替补)回复于 2005-07-03 13:47:22 得分 10

同意楼上的,好像_bstr_t(CString)也可以  
   
  还有好像只看到了打开,没有看见关闭连接阿Top

4 楼legendhui(秋天的叶子)回复于 2005-07-03 13:50:16 得分 10

GetBuffer的问题,你可以直接把字符串强制转换用_bstr_tTop

5 楼shicheng521()回复于 2005-07-03 14:04:47 得分 10

同意楼上的Top

6 楼truewill(无处不在)回复于 2005-07-03 14:13:30 得分 10

GetBuffer时,给个大一点缓冲,用完ReleaseBuffer  
   
  不过你这里应该用   (LPCTSTR)strConn   就好了吧Top

7 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2005-07-03 14:26:25 得分 10

直接类型转换好了  
  GetBuffer要对应的ReleaseBufferTop

8 楼WecanHuang(曾阿牛)回复于 2005-07-03 14:37:47 得分 10

就是那个GetBuffer的问题Top

9 楼an_bachelor(洗澡就是浪費生命)回复于 2005-07-03 14:40:34 得分 10

數據庫類即使沒關閉通常都會在解構函數裏Close的啦Top

10 楼sten(近视进士)回复于 2005-07-03 16:54:18 得分 10

学习!Top

11 楼lianglp(寻找黄金分割点)回复于 2005-07-03 18:39:57 得分 0

GetBuffer   必须是与ReleaseBuffer成对出现(VC6)???  
  不是吧!!!  
  建议去看看MFC实现代码。  
   
  其实当GetBuffer()是,CString类产首先检查引用计数是否>1,如果是,重新分配相同的内存,  
  把先前的内存拷贝到新分配的内存中,再对先前的引用计数减1;如为1,则直接返回内存地址,  
  搞不懂说要调用ReleaseBuffer()。  
  其实ReleaseBuffer()的实现也有点类似,只是它根据长度释放而已。Top

12 楼sboom(+-LingCh-+)(爱美人不爱VC)回复于 2005-07-03 18:51:23 得分 0

即使把GetBuffer改成LPCTSTR也还是泄漏,问题到底出在哪里?Top

13 楼taoming6363389(陶明)回复于 2005-07-03 18:56:58 得分 0

啊Top

14 楼sboom(+-LingCh-+)(爱美人不爱VC)回复于 2005-07-10 12:35:30 得分 0

问题仍然没有解决Top

15 楼eeixy2000(老顽童)回复于 2005-07-10 16:30:34 得分 0

我使用的时候,都是GetBuffer(0)而不是GetBuffer(),一直没有出现此类问题,要不你试试!Top

相关问题

  • delphi中防止内存泄漏的经验
  • 内存泄漏(memory leaks!) (有诊断经验的进)
  • 内存泄漏!!
  • 内存泄漏!
  • 内存泄漏!??
  • 关于GDI内存泄漏
  • 线程与内存泄漏
  • 内存泄漏的问题
  • 内存泄漏问题
  • 内存泄漏问题

关键词

  • 内存
  • getbuffer
  • releasebuffer
  • strconn
  • lpctstr
  • 问题
  • cstring
  • 出现

得分解答快速导航

  • 帖主:sboom
  • moany
  • roscoe
  • gooyan
  • legendhui
  • shicheng521
  • truewill
  • oyljerry
  • WecanHuang
  • an_bachelor
  • sten

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo