c++ - _bstr_t 内存泄漏

标签 c++ memory-management memory-leaks bstr

我有一个 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/

相关文章:

c++ - 是否有一种优雅的方式来处理 Windows OpenGL 应用程序中全屏和窗口模式之间的切换?

Java 等了 20 小时才产生 OutOfMemory 错误?

python - 为什么将 numpy 数组与列表进行比较会消耗如此多的内存?

python - Python/SQLAlchemy 中的 weakref 性能非常差

ios - OpenCV MatToUIImage 导致内存泄漏

c++ - 可选类型名是否适用于概念?

c++ - 指向类派生成员的指针

C++多行输入

python - 将 numpy 数组设置为 None 是否释放内存?

javascript - 为什么这个js函数会导致内存泄漏?