如果指定的指针是"有效的",有没有办法确定(当然是以编程方式)?检查NULL很简单,但像0x00001234这样的东西呢?当试图取消引用这种指针时,会发生异常/崩溃.
首选跨平台方法,但平台特定(适用于Windows和Linux)也可以.
更新澄清: 问题不在于陈旧/释放/未初始化的指针; 相反,我正在实现一个从调用者获取指针的API(比如指向字符串的指针,文件句柄等).调用者可以(有意或无意地)发送无效值作为指针.如何防止崩溃?
我很清楚这个问题的丑陋,我还是想知道它是否可能:
当程序尝试读取/写入无效指针(NULL,未分配的块等)时,窗口会使应用程序崩溃并发生访问冲突异常.
问题是,有没有办法检查这个指针在尝试使用它之前会产生异常,否则,有没有办法捕获这个异常?
我目前的代码效果如下:
if( objectPointer != NULL){
delete objectPointer;
}
Run Code Online (Sandbox Code Playgroud)
不起作用,因为编译器将指针设置为无效的十六进制数,例如:
等等....
那么在尝试删除对象之前检查无效指针的最佳方法是什么?
如何检查变量,特别是指针是否在C++中定义?假设我有一个班级:
class MyClass {
public:
MyClass();
~MyClass() {
delete pointer; // if defined!
}
initializePointer() {
pointer = new OtherClass();
}
private:
OtherClass* pointer;
};
Run Code Online (Sandbox Code Playgroud)