我正在使用 GetSidIdentifierAuthority 函数进行某些操作,它返回给我一个指针。完成后,我想释放这个指针。但是,每当我试图释放它时,它都会立即崩溃。
PSID_IDENTIFIER_AUTHORITY pSid= NULL;
EXPLICIT_ACCESS *pEa= NULL;
PACL pACL = NULL;
ULONG eaSize = 0;
DWORD dwRes = 0;
//some initialization
dwRes = GetExplicitEntriesFromAcl(pACL, &eaSize, &pEa);
pSid= GetSidIdentifierAuthority(pEa[0].Trustee.ptstrName);
//Here GetLastError returns sucess
LocalFree((HLOCAL)pEa); //This call success
LocalFree((HLOCAL)pACL); //This call success
LocalFree(pSid); //This call crushes
在我看来,由于这是一个指针并且 GetSidIdentifierAuthority 已经返回,它应该由我释放,但我无法做到。这里可能出了什么问题?
最佳答案
获取SidIdentifierAuthority
https://msdn.microsoft.com/en-us/library/windows/desktop/aa446655(v=vs.85).aspx
GetSidIdentifierAuthority 函数返回指向 SID_IDENTIFIER_AUTHORITY 结构的指针在指定的安全标识符 (SID) 中。
pSid 只是指向 pEa 中的内存。由于您释放了 pEa,pSid 指向的内存已经消失,释放 pSid 将导致崩溃。
不要在代码中释放 pSid,它不是新的内存块。
关于c++ - 处理 GetSidIdentifierAuthority 函数的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36930567/