读书人

怎么在C++里实现MFC里的AfxIsValidAdd

发布时间: 2012-03-08 13:30:13 作者: rapoo

如何在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)));
}

读书人网 >C++

热点推荐