use*_*790 2 c++ pointers undefined-behavior
int f(int *x)
{
*x = 5;
return *x;
}
int main()
{
int * y = 0;
int z = f(y);
}
Run Code Online (Sandbox Code Playgroud)
为什么这段代码会给我一个运行时错误?
hmj*_*mjd 10
为什么这段代码会给我一个运行时错误?
因为y是一个NULL指针,它被解除引用f().注意,取消引用NULL指针是未定义的行为.
你可以通过解除引用指针返回一个整数吗?
是的,假设指针指向有效int.例如:
int main()
{
int y = 0;
int z = f(&y);
}
Run Code Online (Sandbox Code Playgroud)
小智 7
如果指针指向某个有效内存,则可以.在您的情况下,您将取消引用NULL(0x00)指针,这是未定义的行为(也称为UB).例如,这可以正常工作:
int f(int *x)
{
*x = 5;
return *x;
}
int main()
{
int value = 1986;
int *y = &value; // Point to something valid.
int z = f(y);
}
Run Code Online (Sandbox Code Playgroud)