如果一个程序包含以下代码,它可能会崩溃。为什么?

If a program contains the following code, it may crash. Why?

int *x;
{
    int y;
    x = &y;  
} 
*x = 5;

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

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

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