SysFreeString 不会释放变量

SysFreeString is not freeing the variable

本文关键字:变量 释放 SysFreeString      更新时间:2023-10-16

谁能帮助我理解为什么下面的代码在分配内存后没有释放内存。

BSTR ys;
{
    ys = ::SysAllocString(L"Asdfghjk");
    {
        ::SysFreeString(ys);
    }
}
wcout << ys; // *I could see "Asdfghjk" in console window*

正在释放内存,但它没有将其归零,所以碰巧它仍然包含其以前的值。

释放内存后(在调用 wcout 中)对内存的使用是未定义的行为。它似乎有效,但只是偶然的。

在这种释放 BSTR 的特殊情况下,没有必要释放它,你是对的,这不是关于不将其归零或成为未定义的行为。BSTR 分配是缓存的,因此当您执行 SysFreeString() 分配的块不会立即消失时,它会保持缓存以供以后使用。这是由OANOCACHE变量和SetOaNoCache函数控制的。