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

C++ 为什么访问未初始化的指针不显示无错误?,c++,C++,如果我有一个类矩形 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);

如果我有一个类矩形

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);

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

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

error C4700: uninitialized local variable 'Obj' used

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

error C4700: uninitialized local variable 'Obj' used

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


行为只是没有定义。

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


行为只是没有定义。

访问未初始化指针的值——更不用说取消引用了——会给出未定义的行为


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

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


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

C++在运行时不会跟踪指针是否初始化。如果您将警告级别设置得足够高,编译器可能会对未初始化变量的使用发出警告。Fraid not。如何处理未初始化的指针完全取决于实现。通常,指针只会包含堆栈上发生的任何垃圾,如果它不指向任何致命的地方,那么就可以继续了。除非你不是。有些东西被粉碎了,直到后来才发现。C++在运行时没有跟踪指针是否被初始化。如果您将警告级别设置得足够高,编译器可能会对未初始化变量的使用发出警告。Fraid not。如何处理未初始化的指针完全取决于实现。通常,指针只会包含堆栈上发生的任何垃圾,如果它不指向任何致命的地方,那么就可以继续了。除非你不是。有些东西刚刚被打碎,你要过一会儿才能发现。g++版本应该是类似于警告的内容:“Obj”在此函数中未初始化使用[-Wuninitialized]g++版本应该是类似于警告的内容:“Obj”在此函数中未初始化使用[-Wuninitialized]