1

我正在使用一个 MFC 项目,该项目应在独立于平台的环境中进行保护,使用标准函数而不是 MFC/AFX。

例如:将使用 std::string 代替 CString,使用 std::mutex 代替 CMutex。

MFC 函数“AfxIsValidAddress”的独立于平台的 C++11 std::-等价物是什么?

4

1 回答 1

4

标准库中没有类似的东西AfxIsValidAddress(),而且似乎该函数实际上并没有做那么多验证。

请参阅AfxIsValidAddress (and Others) Don't Work as Advertised,它说该函数最终只是对 NULL 进行检查。关于有效地址检查功能系列,它也有这样的说法:

有几个功能相似的 Win32 API:IsBadWritePtrIsBadHugeWritePtrIsBadReadPtrIsBadHugeReadPtrIsBadCodePtrIsBadStringPtr。至少从 2004 年开始,人们就知道这些功能已经无法修复,永远不能使用。万能的 Raymond Chen 和 Larry Osterman 都详细讨论了原因,所以只是简短的重新hash:IsBad*Ptr 都是通过访问测试地址并捕获任何抛出的异常来工作的。问题是这些访问违规中的某些(即堆栈保护页面上的)永远不应该被捕获 - 操作系统使用它们来适当地扩大线程堆栈。

我认为最好遵循标准的 C++ 程序来检查指针是否不是nullptr或更好地尽可能限制指针的使用。

于 2017-06-26T12:29:00.907 回答