gpt4 book ai didi

c++ - Visual C++ 中的 'Bad Ptr' 是什么意思?

转载 作者:太空宇宙 更新时间:2023-11-04 14:44:09 24 4
gpt4 key购买 nike

对于C++,当我们检查指针是否有效时,通常我们会做以下事情:

if (p == NULL){
// error handling
}

然而,在 VC++ 中,即使 p 也不是 NULL(也就是 0),它是 0x00000004,也意味着 Bad Ptr。然后导致异常,我们知道这个地址是 protected ,不能被覆盖。

我在这里搜索过类似的问题,但没有得到答案。

我的问题是:

  1. 当 Bad Ptr 发生时,为什么不直接将此指针设置为 0?
  2. 由于Bad Ptr的值不为0,VC++中如何判断指针是否有效?

最佳答案

在 Windows 中,虚拟内存地址空间中的前 65536 个字节(地址 0x00000000 到 0x0000FFFF)始终未映射,永远无法寻址 RAM。确保错误的指针值始终使程序因 AccessViolation 而崩溃的功能。最常见的原因是 NULL 指针,但空指针并不专门产生对地址 0 的访问。例如,在像 C++ 这样的面向对象的编程语言中,尝试通过空指针访问对象的成员会产生对更大地址的访问大于 0。大于对象内成员的偏移量。

这不是调试器停止的地方,您还会在其他地址上看到 Bad Ptr,即引用未映射内存页的那种。而且,如果取消引用,也会使您的程序崩溃。开始使用调试器的一个很好的理由。但不是你的情况,0x00000004 已经被底部的禁区覆盖。

winapi 有检测指针值是否错误的函数。不过,我不打算记录它们,这些函数 are dangerous .

具有这样的指针值总是您的代码中的错误。您必须修复错误。

关于c++ - Visual C++ 中的 'Bad Ptr' 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23802466/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com