ConvertBSTRToString()使用出现内存泄漏

本文深入探讨了在使用CString与BSTR类型进行数据转换时,如何避免内存泄漏的问题。通过实例分析,阐述了在转换过程中正确管理中间变量的重要性,并提供了有效的内存管理实践。

以下两种方式实现功能一样,获取数据库表的名称,放到str中,需要将BTRS转换为String类型,但后一种方式会出现内存泄漏的问题

////////////////////////////1/////////////////////////////////

_variant_t temvr;

CString str;

 temvr = pRs->GetCollect("运行机车号");
char *tchr;
tchr = _com_util::ConvertBSTRToString((_bstr_t)temvr);

str.Format("%s",tchr);

delete tchr;

///////////////////////////2///////////////////////////////////

_variant_t temvr;

CString str;

 temvr = pRs->GetCollect("运行机车号");
str = _com_util::ConvertBSTRToString((_bstr_t)temvr);
////////////////////////////////////////////////////////////////////

pRs为_RecordsetPtr型,操作数据库表

ConvertBSTRToString(BSTR),将BSTR类型转换为String类型,在转换过程中需要涉及BSTR的转换,如果使用因此需要将转换得到的char指针用delete删除

同理,在将CString转成BSTR时,需要使用到CString::SysAllocString(),在使用后,应该调用SysFreeString来释放内存,否则会导致内存泄漏

因此,在编程过程中,不应该忽视转换的中间量问题,在了解相关函数的特性后,调用才能做合适的约减,否则应该一步步来,不能直接进行中间变量类型转换。


关CString,BSTR,_bstr_t,variant_t释放问题,请参考

        

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值