如何在C++里实现MFC里的AfxIsValidAddress功能
用NULL判断不准确,出现野地址的时候1样crash.
求救!
[解决办法]
不是要底层实现的话,有几个 WIN32 API 可以利用:
IsBadReadPtr
IsBadWritePtr
IsBadCodePtr
IsBadStringPtr
此外,也可以用 VirtualQuery 监测虚地址是否已提交
[解决办法]
MFC的实现
BOOL AFXAPI AfxIsValidAddress(const void* lp, UINT nBytes,
BOOL bReadWrite /* = TRUE */)
{
// simple version using Win-32 APIs for pointer validation.
return (lp != NULL && !IsBadReadPtr(lp, nBytes) &&
(!bReadWrite || !IsBadWritePtr((LPVOID)lp, nBytes)));
}