SysFreeString 不会释放变量
SysFreeString is not freeing the variable
谁能帮助我理解为什么下面的代码在分配内存后没有释放内存。
BSTR ys;
{
ys = ::SysAllocString(L"Asdfghjk");
{
::SysFreeString(ys);
}
}
wcout << ys; // *I could see "Asdfghjk" in console window*
它正在释放内存,但它没有将其归零,所以碰巧它仍然包含其以前的值。
释放内存后(在调用 wcout
中)对内存的使用是未定义的行为。它似乎有效,但只是偶然的。
在这种释放 BSTR 的特殊情况下,没有必要释放它,你是对的,这不是关于不将其归零或成为未定义的行为。BSTR 分配是缓存的,因此当您执行 SysFreeString() 分配的块不会立即消失时,它会保持缓存以供以后使用。这是由OANOCACHE
变量和SetOaNoCache
函数控制的。
相关文章:
- 在将变量声明为引用时,堆在释放后使用
- 如果包含映射的静态库与可执行文件和动态库链接,静态映射(变量)是否会被多次释放?
- 在C++中创建和释放临时虚拟变量
- 如果一个变量在它之前释放了另一个(相同的数据类型)变量,如何将其分配给内存?
- 函数调用后释放变量
- 释放指向保留嵌套变量内存地址的结构的指针
- C++ 中指针变量的内存释放
- 如何释放为指针变量本身提供的内存?
- C 全局对象变量内存释放
- 如何释放C++异常类析构函数中的变量
- 如果我将内存动态分配给静态变量,我应该释放它还是会自动释放它
- 释放中间变量
- 如何释放局部变量拥有的资源
- 分配给 cpp 中定义的全局静态变量的内存是否在 C++ 中删除其类的实例后释放
- 为什么不能在堆栈上释放变量?
- 是否释放了局部变量的地址
- pthreads 中的条件变量并释放多个锁
- C++:是为循环中声明的变量释放的内存
- 为类的成员变量释放动态分配的内存会产生错误
- 静态变量释放顺序