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

时间:2015-10-06 07:04:35

标签: c++

如果我有一个类Rectangle

class Rectangle{

 private:
   double width;
   double height;


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

我发现了一个对象:

Rectangle *Obj;

然后使用Set function as

Obj->Set(6.0, 9.0);

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

3 个答案:

答案 0 :(得分:4)

使用未初始化的指针是未定义的行为。这意味着实现可以做任何想做的事情,或根本不做任何事情

行为刚刚未定义。

答案 1 :(得分:1)

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

error C4700: uninitialized local variable 'Obj' used

答案 2 :(得分:1)

访问未初始化指针的值 - 更不用说解除引用它 - 给出了未定义的行为。

未定义行为的本质是允许任何结果,但没有特别要求。那个词"任何"是相当广泛的....发送错误信息是正确的。不发出错误消息是正确的。重新格式化硬盘驱动器并安装不同的操作系统是正确的(尽管实际上不太可能)。