C++ 初始化指针但未获得相同的值零
我的问题是在两个不同的编译器中编译下面的代码的结果。我在Eclipse Helios和在线GDB编译器中输入了以下代码行,得到了不同的结果: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
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
,你不应该依赖他们;不能保证它们。读取未初始化的变量是错误的。