可能重复:
Can a local variable's memory be accessed outside its scope?函数返回后本地内存地址是否有效?
我是令人耳目一新有关如何存储在内部工作原理的知识,我所面临的困惑。下面是示例代码
int * func(){
int retval = 3;
return &retval;
}
int main(void){
int *ptr = func();
printf("address return from function %p and value %d\n", ptr, *ptr);
}
我的理解对于如何堆栈存储器上的日常工作,是当一个函数被调用,它被压入堆栈。一旦函数返回,此例程中局部变量的生存期将不再有效。所以返回局部变量的地址似乎是无效的,但是当我测试这个代码时,它实际上返回它的地址,并且在函数返回后仍然有效。
我误解了这个概念吗?赞赏任何意见,谢谢。
总之,你在做什么是无效的,但这并不意味着它不会在某些情况下工作。 –
// @Peter提到的dupe包含我见过的最好的答案之一,有近2000个upvotes .. – amit
无效和不工作是两个不同的事情。直到数据被覆盖(通过另一个函数调用),即使您不应该也可以访问它。如果你在'func'和'printf'之间调用了另一个函数,你会得到一些其他的数字,而不是3. – ughoavgfhw