本地内存地址在函数返回后是否有效?
可能重复:
局部变量的内存是否可以在其范围之外访问?
我正在刷新关于内存如何工作的知识,并且我遇到了困惑。 这里是示例代码
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?