int f(int *x)
{
*x = 5;
return *x;
}
int main()
{
int * y = 0;
int z = f(y);
}
为什么这段代码会给我一个运行时错误?
int f(int *x)
{
*x = 5;
return *x;
}
int main()
{
int * y = 0;
int z = f(y);
}
为什么这段代码会给我一个运行时错误?
为什么这段代码会给我一个运行时错误?
因为y
是一个NULL
指针,它在f()
. NULL
请注意,取消引用指针是未定义的行为。
您可以通过取消引用指针来返回整数吗?
是的,假设指针指向一个有效的int
. 例如:
int main()
{
int y = 0;
int z = f(&y);
}
你可以,如果一个指针指向一些有效的内存。在您的情况下,您正在取消引用 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);
}
因为 after int *y = 0;
,y
是一个指向空的指针(指向 address 0
)。你的代码应该是这样的:
int * y = new int;
*y = 0;
int z = f(y);
// ...
delete y;
或者
int y = 0;
int z = f(&y);
在取消引用之前检查指针并始终指定错误行为:
int f(int *x)
{
if ( x )
{
// do something with x
}
else
{
// do something else in case null pointer
}
}
取消引用空指针会产生空指针异常,例如您的情况。