fhn*_*eer 4 c++ memory-leaks memory-management 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 }
Run Code Online (Sandbox Code Playgroud)
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);
Run Code Online (Sandbox Code Playgroud)
其次,不要这样做:
SysFreeString(xml);
Run Code Online (Sandbox Code Playgroud)
该_bstr_t课程将做到这一点你.
第三,BSTR不会立即向操作系统释放内存,它会缓存最近使用的字符串,以使SysAllocString更快.您不应期望在SysFreeString之后看到内存使用率直接下降.
您可以控制此行为以进行调试:
最后,在任务管理器中查看内存使用情况时,您需要查看"提交大小"列而不是"工作集".转到菜单 - >视图 - >选择列以显示列.并且还要注意,这实际上只能帮助一段时间 - 内存可能不会立即释放到操作系统,但如果你没有泄漏,它就不会在一个小时内永远上升.
| 归档时间: |
|
| 查看次数: |
4391 次 |
| 最近记录: |