为什么访问未初始化的指针不显示错误?

Why doesn't accessing an uninitialized pointer display an error?

本文关键字:显示 错误 指针 访问 初始化 为什么      更新时间:2023-10-16

如果我有一个矩形

class Rectangle{
 private:
   double width;
   double height;

   public:
      void    Set(double w , double l){
          width   = w;
          height  = l;
      }
};

和我声明一个对象:

Rectangle *Obj;

,然后使用Set函数

Obj->Set(6.0, 9.0);

程序运行并没有显示错误,而根据我的说法,它应该显示一个错误,因为我没有初始化指针。

使用未初始化的指针是未定义的行为。这意味着实现可以做任何它想做的,或者什么都不做

行为只是没有定义

我刚刚在Visual studio中编译了这个,我得到了下面的错误。可能是您选择的编译器没有这些检查?你正在使用的编译器是什么?

error C4700: uninitialized local variable 'Obj' used

访问未初始化的指针的值——更不用说对其解引用了——会产生未定义的行为。

未定义行为的本质是允许任何结果,但没有任何特别的要求。"any"这个词的含义非常广泛....发出错误消息是正确的。不发出错误消息是正确的。重新格式化硬盘并安装不同的操作系统是正确的(尽管在实践中不太可能)。