OLECHAR 用作指针 - 如果不是 nullptr,它会悬空指针吗?函数 CoTaskMemFree()

OLECHAR used as pointer - will it dangling pointer if not nullptr? Function CoTaskMemFree()

提问人:Samuil Dimitrov 提问时间:4/5/2023 更新时间:4/12/2023 访问量:27

问:

我生成一个 GUID,然后使用 StringFromCLSID() 将其保存在 OLECHAR* 中。如果我在使用 CoTaskMemFree() 后创建一个返回 OLECHAR 而不是 nullptr OLECHAR 的函数 - 它会导致指针悬空吗?我只想返回值,但不知道它是否会导致问题。代码如下:

OLECHAR* generateGUIDString()
{
    GUID guid;
    CoCreateGuid(&guid);
    OLECHAR* guidString;
    StringFromCLSID(guid, &guidString);
    return guidString;
}

否则我必须多次写:

  GUID guid;
  CoCreateGuid(&guid);
  OLECHAR* guidString;
  StringFromCLSID(guid, &guidString);
  //use it here in some process
  CoTaskMemFree(guidString);
  guidString = nullptr;

我只想确保没有内存泄漏或悬空指针,并且程序运行良好。

内存泄漏 GUID 悬空指针

评论


答:

0赞 Artem Razin 4/12/2023 #1

由于是 C++,您可以返回:std::wstring

std::wstring generateGUIDString()
{
    GUID guid;
    CoCreateGuid(&guid);
    OLECHAR* guidString;
    StringFromCLSID(guid, &guidString);
    std::shared_ptr<OLECHAR> ptr(guidString, [](OLECHAR* ptr)
        {
            CoTaskMemFree(ptr);
        });
    return ptr.get();
}