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

时间:2015-12-13 00:33:29

标签: c++ pointers reference dereference

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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