内存泄露解决记录——BSTR字符串释放与VARIANT类型的释放

17 篇文章 0 订阅
5 篇文章 0 订阅

发现的内存泄露有两种,一种是上篇提到的,某些窗口没有用DestroyWindow来释放资源,而是自己写的一个ForceClose函数,这导致了某些函数没被调用,比如PostNcDestroy。

另外就是一个内嵌浏览器中使用到的BSTR字符串没有释放造成的问题。

 

String Manipulation Functions Descriptions
SysAllocStringCreates and initializes a string.
SysAllocStringByteLenCreates a zero-terminated string of a specified length.
SysAllocStringLenCreates a string of a specified length.
SysFreeStringFrees a previously created string.
SysReAllocStringChanges the size and value of a string.
SysReAllocStringLenChanges the size of an existing string.
SysStringByteLenReturns the length of a string in bytes.
SysStringLenReturns the length of a string.

以上是BAIDU 百科BSTR的字符串操作函数

 

问题都出在分配了BSTR字符串之后,没有SysFreeString

 

谁的屁股谁自己擦,在哪个函数里分配,就在哪个函数里释放。

 

CString str_url = “XXXXX”;

 

_Browser->Navigate(str_url.AllocSysString(),
         &flags,
         &target_frame_name,
         &post_data,
         &headers);

 

这样的调用理所当然地造成泄漏,Navigate里又不会将BSTR字符串释放。

 

我的解决办法是用一个BSTR中间变量保存字符串,使用完之后用SysFreeString()来释放。

 

觉得还是不多废话了,泄露的原因就是BSTR字符串,BSTR字符串数组,下面是关于如何使用DISPPARAMS和SAFEARRAY的文章

http://blog.csdn.net/debehe/archive/2008/10/30/3187195.aspx

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值