C++ 这是isBadWritePtr()的好替代品吗
我在@constm回答这个问题时看到了下面的代码 我正在Visual Studio 2013中使用Windows和编码。代码在我看来很好,我可以看出它将克服C++ 这是isBadWritePtr()的好替代品吗,c++,visual-studio,memory-management,heap-memory,heap-corruption,C++,Visual Studio,Memory Management,Heap Memory,Heap Corruption,我在@constm回答这个问题时看到了下面的代码 我正在Visual Studio 2013中使用Windows和编码。代码在我看来很好,我可以看出它将克服isBadReadPtr中访问页面保护的问题,但我想了解它将如何克服多线程问题 此代码是否是isBadReadPtr的良好替代品?另外,此代码应该返回false,以便我理解ptrI pass是有效的 另外,如果我传递一个类的对象,它如何知道对象的大小并检查整个空间?也许我不太懂虚拟查询 请让我知道我所理解的是否正确 蒂亚 仅供参考:新旧事物
isBadReadPtr
中访问页面保护的问题,但我想了解它将如何克服多线程问题
此代码是否是isBadReadPtr
的良好替代品?另外,此代码应该返回false
,以便我理解ptr
I pass是有效的
另外,如果我传递一个类的对象,它如何知道对象的大小并检查整个空间?也许我不太懂虚拟查询
请让我知道我所理解的是否正确
蒂亚 仅供参考:新旧事物:“IsBadXxxPtr真的应该被称为crashprogrammandously”@RichardCritten,是的,我知道这一点。这就是我寻找固定替代方案的原因。这很好?\不会有“修复”。它没有坏。你读过并理解雷蒙德帖子背后的逻辑吗?
bool IsBadReadPtr(void* p)
{
MEMORY_BASIC_INFORMATION mbi = {0};
if (::VirtualQuery(p, &mbi, sizeof(mbi)))
{
DWORD mask = (PAGE_READONLY|PAGE_READWRITE|PAGE_WRITECOPY|PAGE_EXECUTE_READ|PAGE_EXECUTE_READWRITE|PAGE_EXECUTE_WRITECOPY);
bool b = !(mbi.Protect & mask);
// check the page is not a guard page
if (mbi.Protect & (PAGE_GUARD|PAGE_NOACCESS)) b = true;
return b;
}
return true;
}