【发布时间】:2009-01-27 04:33:14
【问题描述】:
我目前的代码大意为:
if( objectPointer != NULL){
delete objectPointer;
}
不起作用,因为指针被编译器设置为无效的十六进制数字,例如:
- 0xbaadf00d
- 0xdeadbeef
等等……
那么在尝试删除对象之前检查无效指针的最佳方法是什么?
【问题讨论】:
-
我认为编译器不会在你背后设置指针。创建时是否将 objectPointer 初始化为 0?
-
@Mark - 我认为有一个编译器选项可以自动将内存初始化为已知模式,如 0xdeadbeef(尽管在这种特殊情况下可能是堆栈内存,而不是堆内存)。
-
@LeopardSkin,您正在考虑调试模式下的 Visual C++。它具有适用于所有不同类型分配的内存模式。
-
@Hazar:在 NULL 指针上使用 delete 是完全有效的(这是一个无操作),如果您要删除它,请不要检查它是否为 NULL。
-
@Evan - 你是对的,你不需要在删除之前进行 NULL 指针检查,但是在删除之后将指针设置为 NULL 很有用。