【问题标题】:Initializing a pointer but not getting the same value zero初始化指针但未获得相同的零值
【发布时间】:2019-08-25 04:09:20
【问题描述】:

我的问题是由于在两个单独的编译器中编译下面的代码而产生的。我在 Eclipse Helios 和 Online GDB Compiler 中输入了以下代码行,得到了不同的结果:

    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

对于在线 GDB,结果是:

Value of ptr1 = 0
Value of ptr2 = 20

然而,Eclipse Helios的结果是:

Value of ptr1 = 225472
Value of ptr2 = 20

它只是告诉我 ptr1 现在在其中包含一些垃圾值而不是零吗?

【问题讨论】:

标签: c++ pointers initialization delete-operator


【解决方案1】:

它只是告诉我 ptr1 现在包含一些垃圾值而不是零吗?

是的,该值不能保证为零。对于default initialization

(强调我的)

否则,什么都不做:具有自动存储持续时间的对象(及其子对象)被初始化为不确定值

所以两个编译器的观察结果都是合理的。

【讨论】:

  • 我明白为什么两者都可以接受。编译器是如何编写或说来评估这些类型的情况的吗?
  • @Euxitheos 因为它不是标准的一部分,编译器可以为所欲为。
  • @Euxitheos 甚至编译器也会做一些编译器不需要的事情,例如在这种情况下,将值初始化为0,您不应该依赖它们;他们没有得到保证。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多