ConvertBSTRToString()使用出现内存泄漏

12 篇文章 0 订阅

以下两种方式实现功能一样,获取数据库表的名称,放到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释放问题,请参考

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值