可能重复: Can a local variable's memory be accessed outside its scope?
最近我发现了以下代码:
#include <stdio.h>
int* abc () {
int a[3] = {1,10,100};
return a;
}
int* xyz () {
int b[1] = {222};
return b;
}
int main() {
int *a, *b;
a = abc();
b = xyz();
printf("%d\n", *a);
return 0;
}
输出为222
。'a'
指向在xyz()
中声明的数组。
我的问题是:
xyz()
中声明的数组。xyz()
中声明的数组应该在函数执行后超出作用域。为什么不发生这种事?发布于 2012-09-17 08:27:15
您可能会看到222,因为用于abc
中的本地数组的内存已被用于其他东西--函数xyz
的堆栈。你把一个地址传递到那个记忆里。再进行几次函数调用,*a
可能包含一些其他值。
应该在函数执行后超出范围。为什么不发生这种事?
这个变量已经超出了范围。使用函数外部的地址是不正确的代码:使用指向函数返回的本地数据的指针是未定义的行为。
发布于 2012-09-17 08:28:35
2:它正在发生,整个程序都有未定义的行为。这不是一个正确的程序,也没有什么意义去思考如果和但是。
发布于 2012-09-17 08:27:46
变量a
和b
是自动变量;在其他函数中使用它们的入口是一种未定义的行为。任何事情都可能发生:您不能期望输出(例如,优化编译器可以删除一些非法代码)。
https://stackoverflow.com/questions/12463405
复制相似问题