垃圾值检索

时间:2017-07-09 10:16:17

标签: c pointers

#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;变量被破坏了。

3 个答案:

答案 0 :(得分:2)

函数x返回指向自动局部变量的指针并导致未定义的行为。在这种情况下,可以看到任何预期或意外的结果。

答案 1 :(得分:1)

局部变量的生命周期有限,只能在定义的块{}内扩展。他们有一个本地范围

当控件到达块的末尾时,中的变量的所有存储都不能保证不可写。

可以重复使用那部分内存。那将会?谁知道呢。

这转换为:undefined behaviour

答案 2 :(得分:0)

不像“y”被摧毁。 其内存区域标记为“可写”

所以你可能会找到你的“y”,以及垃圾值。 毕竟,函数返回一个指针,而不是变量本身