可能重复:
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);
}
我的理解是关于堆栈内存如何在例程上工作,当一个函数被调用时,它被推入堆栈。一旦函数返回,此例程中的局部变量的生命周期将不再有效。因此返回局部变量的地址似乎无效,但是当我测试这段代码时,它实际上返回了它的地址,并且在函数返回后仍然有效。
我是否误解了这个概念?感谢任何评论,谢谢。答案 0 :(得分:3)
“测试代码”并不是确定某些内容是否有效的有意义方法。您的代码会产生未定义的行为。未定义行为的一种可能表现是代码可能看起来“正常”。换句话说,你很幸运。
回答这个问题:不,返回指向局部变量的指针是无效的,取消引用这样的指针是无效的。任何这样做的尝试都会导致未定义的行为。