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 的调用中)对内存的使用是未定义的行为。它 似乎 可以工作,但是 only by accident

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