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
函数控制。
谁能帮我理解为什么下面的代码在分配内存后没有释放内存。
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
函数控制。