SysFreeString没有释放变量

时间:2016-03-02 15:45:34

标签: c++ winapi visual-c++ com

任何人都可以帮助我理解为什么下面的代码在分配后没有释放内存。

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

2 个答案:

答案 0 :(得分:6)

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

在释放内存后(在wcout的调用中)使用内存是未定义的行为。它出现,但only by accident

答案 1 :(得分:0)

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