如果一个程序包含以下代码,它可能会崩溃。为什么?
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
取消引用悬空指针是未定义的行为,如果幸运的话,可能会导致崩溃或其他令人讨厌的事情。
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
取消引用悬空指针是未定义的行为,如果幸运的话,可能会导致崩溃或其他令人讨厌的事情。