#include<stdio.h>
#include<conio.h>
int *x()
{
int y=10;
return (&y);
}
void main()
{
int *p;
clrscr();
p=x();
printf("%d",*p); // Output 10
getch();
}
这里当我们调用x()函数时,x的激活记录被压入堆栈。当我们退出该函数时,激活记录及其中的所有局部变量都将被销毁。 那么,在x函数出来之后,我们如何能够在main函数中访问y的值?输出值应该是一些垃圾值,因为&#34; y&#34;变量被破坏了。
答案 0 :(得分:2)
函数x
返回指向自动局部变量的指针并导致未定义的行为。在这种情况下,可以看到任何预期或意外的结果。
答案 1 :(得分:1)
局部变量的生命周期有限,只能在定义的块{}
内扩展。他们有一个本地范围。
当控件到达块的末尾时,中的变量的所有存储都不能保证不可写。
可以重复使用那部分内存。那将会?谁知道呢。
undefined behaviour
!答案 2 :(得分:0)
不像“y”被摧毁。 其内存区域标记为“可写”
所以你可能会找到你的“y”,以及垃圾值。 毕竟,函数返回一个指针,而不是变量本身