<分区>
以下函数是否安全,返回一个指向局部变量的指针?
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”