gpt4 book ai didi

c++ - _bstr_t 内存泄漏

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:20:03 26 4
gpt4 key购买 nike

我有一个 C++ 代码。但它没有正确释放内存。告诉我哪里错了,这是我的代码

1 void MyClass::MyFunction(void)
2 {
3 for (int i=0; i<count; i++)
4 {
5 _bstr_t xml = GetXML(i);
6 // some work
7 SysFreeString(xml);
8 }
9 }

GetXML(第 5 行)返回一个 BSTR。此时程序的内存增加。但是在 SysFreeString(第 7 行)之后内存并没有释放。我在这里做错了什么?

最佳答案

首先:

// This makes a copy.
// This is where the leak is. You are leaking the original string.
_bstr_t xml = GetXML();

// You want to use this, to attach the BSTR to the _bstr_t
_bstr_t xml = _bstr_t(GetXML(), false);

其次,不要这样做:

SysFreeString(xml); 

_bstr_t 类将为您做这件事。

第三,BSTR不会立即释放内存给操作系统,它会缓存最近使用的字符串,以使SysAllocString更快。您不应期望在 SysFreeString 之后看到内存使用率直线下降。

您可以出于调试目的控制此行为:

最后,在任务管理器中查看内存使用情况时,您需要查看“提交大小”列而不是“工作集”列。转到菜单->查看->选择列以显示该列。还要注意,这实际上只会在一段时间内有所帮助 - 内存可能不会立即释放给操作系统,但如果没有泄漏,它不应该在几个小时内永远上升。

关于c++ - _bstr_t 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13011179/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com