下面的函数是否安全,返回一个指向局部变量的指针?局部变量的安全性
int * foo(void)
{
int a = 6;
int *p = &a;
return p;
}
如果没有,在什么条件下?如果是,编译器如何保证安全?
测试用例尝试:
int * foo(void)
{
int a = 6;
int *p = &a;
return p;
}
int * bar(void)
{
int b = 7;
int *p = &b;
return p;
}
int main()
{
int a = *foo();
int b = *bar();
printf("%d, %d, %d\n", 1, 2, 3); //to mess up stack
printf("%d, %d\n", a, b);
return 0;
}
它将成功打印出 “6,7”。然而用-O2打印“0,0”
你永远不应该返回指向局部变量 – mangusta
@soon你这么快...我只是看见了,正要删除我的帖子。另外,如果-O2测试用例失败。 –
成功(打印“6,7”,没有段错误等)**并不意味着它是正确的。 –