本地内存地址在函数返回后是否有效?

可能重复:
局部变量的内存是否可以在其范围之外访问?

我正在刷新关于内存如何工作的知识,并且我遇到了困惑。 这里是示例代码

int * func(){
   int retval = 3;
   return &retval;
}

int main(void){
   int *ptr = func();
   printf("address return from function %p and value %dn", ptr, *ptr);
}

我的理解是关于堆栈内存在例程中的工作方式,是当函数被调用时,它被推入堆栈。 一旦函数返回,此例程中局部变量的生存期将不再有效。 所以返回局部变量的地址似乎是无效的,但是当我测试这个代码时,它实际上返回它的地址,并且在函数返回后仍然有效。

我误解了这个概念吗? 赞赏任何意见,谢谢。


“测试代码”不是确定某些事情是否有效的有意义的方法。 你的代码产生未定义的行为。 未定义行为的一种可能表现是代码可能似乎是“正在工作”。 换句话说,你只是很幸运。

为了回答这个问题:不,返回一个指向局部变量的指针是无效的,并且它不能取消引用这样一个指针。 任何尝试这样做都会导致未定义的行为。

链接地址: http://www.djcxy.com/p/36333.html

上一篇: local memory address is valid after function return?

下一篇: How to access a local variable from a different function using pointers?