【问题标题】:If a program contains the following code, it may crash. Why?如果一个程序包含以下代码,它可能会崩溃。为什么?
【发布时间】:2016-03-18 17:34:15
【问题描述】:
int *x;
{
    int y;
    x = &y;  
} 
*x = 5;

我认为问题在于x = &y应该改为x = y。但是,我还是不知道为什么会崩溃?

【问题讨论】:

  • 当程序退出定义y的内部范围时,变量x指向超出范围。
  • y 在其旧位置更改时超出范围。所以它绝对是 UNDEFINED BEHAVIOR 并且可以做任何事情。在实践中,您需要一些额外的复杂性才能导致崩溃。
  • 每本书都是关于 C++ 的介绍性书籍,它解释了对象的生命周期。你应该阅读at least one
  • 我投票结束这个问题,因为它的质量很低。

标签: c++ pointers reference dereference


【解决方案1】:

int y 的生命周期在 } 令牌处结束。由于指针x 指向y,我们现在称x 为“悬空指针”。使用 *x 取消引用悬空指针是未定义的行为,如果幸运的话,可能会导致崩溃或其他令人讨厌的事情。

【讨论】:

    【解决方案2】:

    x 在第 5 行被分配地址为y。在第 6 行,y 被销毁。在第 7 行,您尝试写入变量,该地址包含在x 中。哪个被摧毁了。所以你试图写入不存在的变量,这会导致未定义的行为。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-09
      • 1970-01-01
      • 2014-10-05
      • 1970-01-01
      • 2015-12-12
      • 2017-04-01
      相关资源
      最近更新 更多