Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 初始化指针但未获得相同的值零_C++_Pointers_Initialization_Delete Operator - Fatal编程技术网

C++ 初始化指针但未获得相同的值零

C++ 初始化指针但未获得相同的值零,c++,pointers,initialization,delete-operator,C++,Pointers,Initialization,Delete Operator,我的问题是在两个不同的编译器中编译下面的代码的结果。我在Eclipse Helios和在线GDB编译器中输入了以下代码行,得到了不同的结果: int* ptr1 = new int; int* ptr2 = new int(20); cout << "Value of ptr1 = " << *ptr1 << "\n"; cout << "Value of ptr2 = " << *ptr2

我的问题是在两个不同的编译器中编译下面的代码的结果。我在Eclipse Helios和在线GDB编译器中输入了以下代码行,得到了不同的结果:

    int* ptr1 = new int;  
    int* ptr2 = new int(20);  

    cout << "Value of ptr1 = " << *ptr1 << "\n"; 
    cout << "Value of ptr2 = " << *ptr2 << "\n"; 

    delete ptr1; // Destroying ptr1 
    delete ptr2; // Detroying ptr2
然而,日食太阳神结果是:

Value of ptr1 = 0
Value of ptr2 = 20
Value of ptr1 = 225472
Value of ptr2 = 20
它只是告诉我ptr1现在保存了一些垃圾值,而不是零

它只是告诉我ptr1现在保存了一些垃圾值,而不是零

是的,该值不能保证为零。因为

(强调矿山)

否则,将不执行任何操作:具有自动存储持续时间的对象(及其子对象)将初始化为不确定值


因此,两个编译器的观察结果都是合理的。

我理解为什么两者都是可以接受的。编译器是如何编写或说是如何评估这些类型的情况的?@Euxitheos,因为它不是标准的一部分,编译器可以做任何他们想做的事情。@Euxitheos甚至编译器都会做一些编译器不需要的事情,例如,在这种情况下,将值初始化为
0
,你不应该依赖他们;不能保证它们。读取未初始化的变量是错误的。