'Bad Ptr'在视觉C++中是什么意思?
What are 'Bad Ptr' mean in Visual C++?
对于c++,当我们检查指针是否有效时,通常做以下操作:
if (p == NULL){
// error handling
}
然而,在vc++中,即使p也不是NULL(即0),它是0x00000004,也意味着坏Ptr。然后引起异常,我们知道这个地址是受保护的,不能被覆盖。
我在这里搜索了类似的问题,但是我没有得到答案。
我的问题是:
- 当坏Ptr发生时,为什么不把这个指针设置为0?
- 既然坏Ptr的值不为零,如何检查指针是否有效或不在vc++ ?
在Windows中,虚拟内存地址空间中的前65536个字节(地址0x00000000到0x0000FFFF) 总是未映射,永远无法寻址RAM。确保错误的指针值总是通过AccessViolation导致程序崩溃的特性。最常见的原因是NULL指针,但空指针并不只产生对地址0的访问。在像c++这样的面向对象编程语言中,试图通过空指针访问对象的成员会生成对大于0的地址的访问。大于对象内部成员的偏移量。
这不是调试器停止的地方,您还会在其他地址上看到Bad Ptr,这种地址引用未映射的内存页。并且,如果取消引用,也会使您的程序崩溃。开始使用调试器的一个很好的理由。但不是你的情况,0x00000004已经被底部的禁区覆盖了。
winapi有测试指针值是否坏的函数。但是我不打算记录它们,因为这些函数是危险的。
像这样的指针值总是是代码中的错误。-
坏Ptr并不意味着
0
总是,它意味着指针是无效的(地址是无效的,如包含垃圾,或地址是有效的,但不属于你的程序等)。0
或NULL
为特例 -
在声明指针时,应该始终初始化指针,使用有效地址或
例如nullptr
。然后你可以在使用if(p==nullptr)
之前检查它。int* p = reinterpret_cast<int*>(100);
这里的p
不是NULL
,但是它指向一个无效的地址
相关文章:
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- "类模板示例<int>;"语句对 C++11 是什么意思?
- 线应该是什么意思
- "CID"在AT+HTTPPARA= "CID" ,1中是什么意思
- 表达式"b=(b-x)&x"是什么意思?
- 这个表达是什么意思?
- 此代码验证公式是什么意思?
- 跟踪日志中的T.11803()是什么意思?
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- * 和 ** 在 C++ 函数声明中是什么意思?
- _T("xyz")是什么意思?
- #define Dbg(fmt,..) (0) 是什么意思? 警告:表达式无效
- 这行代码到底是什么意思?
- 在命名空间名称之前加上 :: 是什么意思?
- 从字符数组的元素中减去'a'是什么意思
- "friend"关键字在C++中是什么意思?
- 减法中的"0"是什么意思?
- 字符数组前面的加号是什么意思?
- 这里的字符串函数是什么意思