这个内存泄漏有点不可思议,有经验的进来看看。
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




