c++ - 如何将 LPVOID 验证为 <Bad Ptr>

标签 c++

我正在使用非托管的 C++,当我调用返回 LPVOID 的方法时,我遇到了这个问题。

LPVOID MyMethod(...);

问题是此方法有时会返回 Bad Ptr,如果返回的值是 Bad Ptr,我想知道是否有检测方法。

我试过询问它是否为 NULL,但没有成功。

我意识到结果是否为 Bad Ptr 的唯一方法是在调试时,我尝试了一些不同的方法但仍然无法做到。

最佳答案

不,没有简单的方法可以确定指针是否损坏。

Windows 确实有 IsBadReadPtr、IsBadWritePtr。这些函数存在固有缺陷——它们仅确定函数在调用时在您的地址空间中是否可读或可写。它们也可能是 security 的原因issues永远不要使用。

主要问题是无法区分进程仍可访问的“坏”指针和好指针。

例如,

int g[5];
int somethingElse;

void* GetPointer()
{
   return &g[5]; // Whoops, off by one.
}

&g[5] 可能是您进程中的有效指针,并且可能指向其他东西,您将能够访问它而不会崩溃,但写入它会破坏您的状态。

关于c++ - 如何将 LPVOID 验证为 <Bad Ptr>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/683059/

相关文章:

c++ - OpenCV:使用循环查找白色像素并用洪水填充它们

c++ - Visual Studio C++ 阅读标题

c++ - QObject::connect timer with update() 函数

c++ - 如何查找 cpu 在地址别名中使用的位数?

c++ - 模板化运算符 << 未被识别

c++ - 为什么在重载 "out"运算符时使用 "cout"而不是 "<<"?

c++ - 有条件的 static_assert

c++ - QFileDialog 默认为 AppData?

在 Visual Studio Debug模式下运行时,C++ 对象引用损坏

c++ - O(logn) 中 std::set begin() 和 std::set 迭代器之间的距离