我正在使用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已经返回,它应该由我释放,但我无法做到。这可能有什么问题?
答案 0 :(得分:2)
GetSidIdentifierAuthority
https://msdn.microsoft.com/en-us/library/windows/desktop/aa446655(v=vs.85).aspx
GetSidIdentifierAuthority函数返回指向指定安全标识符(SID)中SID_IDENTIFIER_AUTHORITY结构的指针。
pSid只是指向pEa内的内存。由于你释放了pEa,pSid指向的内存不再释放pSid会导致崩溃。
不要在代码中释放pSid,它不是新的内存块。
答案 1 :(得分:1)
PSID_IDENTIFIER_AUTHORITY WINAPI GetSidIdentifierAuthority( In PSID pSid);
根据MSDN,GetSidIdentifierAuthority
函数搜索并返回指向可变长度SID_IDENTIFIER_AUTHORITY
结构内的SID
结构的指针。它不会分配任何额外的内存,所以你不应该释放它的结果。解除分配SID
结构时,将清除内存。