【发布时间】:2012-09-07 01:00:12
【问题描述】:
可能重复:
Can a local variable's memory be accessed outside its scope?
输入:
#include <stdlib.h>
#include <stdio.h>
int func2(void);
int* func1(void);
int func2(void)
{
int* b;
b = func1();
printf("%d", *b);
printf("%d", *b);
printf("%d", *b);
}
int* func1()
{
int a = 13;
return &a;
}
int main()
{
func2();
}
输出:
13 -1077824828 -1077824828
谁能解释堆栈和操作系统中发生了什么?为什么获取指针的值后结果从13变成垃圾?
【问题讨论】:
-
重复数字无穷大加一。这是未定义的行为。
-
此外,
func2没有return任何东西,尽管它是用返回类型int定义的。 -
要真正回答这个问题:在您的特定情况下,对
printf()的第一次调用会覆盖从调用func1()时遗留在堆栈中的13。 -
语言标准未定义。由实现完美定义。
标签: c pointers scope undefined-behavior local-variables