我正在使用非托管的 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/