BSTR向WideString赋值导致内存泄漏

一、问题提出
Mapx图层的重绘是通过响应MapX的用户自定义图层的绘制消息进行的,在消息响应函数中循环遍历地图上加载的图层,调用符合条件的图层的Draw函数进行绘制。使用此机制过程中,发现图层刷新时,内存增长很快,平均每秒钟增长8K左右。最终将问题定位到如下语句:

WideString ws = m_map->Layres->Item(i+1)->Name;

由于问题语句中“=”号右边返回的是一个BSTR类型值,所以先对BSTR类型做一个简单的介绍。
BSTR类型是为了跨语言平台使用而存在的一种宽字符集字符串指针,标准BSTR是一个有长度前缀和null结束符的OLECHAR数组,其定义如下:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
0a 00 00 00 H E L L O \0
BSTR包含四个字节的长度前缀,BSTR的前4字节是一个表示字符串长度的前缀。BSTR长度域的值是字符串的字节数,并且不包括0结束符。由于BSTR类型包含了长度前缀,所以需要通过SysAllocString函数进行内存分配,通过SysFreeString函数进行内存释放。其中SysAllocString函数返回的指针指向BSTR第一个字符,而不是BSTR的内

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值