【发布时间】:2017-03-13 20:53:17
【问题描述】:
据我所知,函数 fun() 结束后,变量 'q' 和 is 地址超出范围。那么,为什么代码的输出是“20 10”?
int *p2;
void fun(int *ptr)
{
int q=10;
ptr=&q;
p2 = ptr;
}
int main()
{
int r=20;
int *p = &r;
fun(p);
printf("%d %d",*p,*p2);
return 0;
}
【问题讨论】:
-
因为它是未定义的行为。
-
如何区分垃圾值和非垃圾值?您的
10是一个垃圾值,与任何其他垃圾值一样好。 -
10是垃圾。 -
这总是一个有趣的解释:stackoverflow.com/questions/6441218/…
-
在某些时候,我们可能需要一个规范的 UB Q&A 来进行重复数据删除(比如“浮点数是否损坏?”之一)。由于 OP 依赖于 UB 而出现的 C 问题数量多得离谱,而对其他用户有帮助的却很少。
标签: c pointers scope undefined-behavior