我怎么不能删除pwstr?

-1 c++ winapi

请问,有人可以解释一下为什么这段代码在运行时"expression _block_type_is_valid(phead-nblockuse)"中给出了错误?

#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <tchar.h>
#include <shlobj.h>
#include <iostream>

using namespace std;

int main() {
    PWSTR path;
    HRESULT hr = SHGetKnownFolderPath(FOLDERID_Desktop, 0, NULL, &path);
    delete[] path;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Som*_*ude 6

因为内存不是由分配的new.事实上,如果你阅读文档,你会看到:

一旦调用不再需要,调用进程负责释放该资源CoTaskMemFree.

  • @user Windows不知道您想使用哪个分配器.Windows是运行时不可知.您可能没有使用C++.许多其他语言都可以调用该API函数.因此,Windows使用自己的分配器(COM堆),导出该分配器,并告诉您使用它来释放内存.你不是傻瓜,你还没有学过这些东西.但你真的应该养成阅读文档的习惯. (2认同)