首页 文章

函数返回后本地内存地址是否有效? [重复]

提问于
浏览
0

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

我正在刷新有关内存如何工作的知识,我面临着困惑 . 这是示例代码

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);
}

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

我误解了这个概念吗?感谢任何评论,谢谢 .

1 回答

  • 3

    “测试代码”并不是确定某些内容是否有效的有意义方法 . 您的代码会产生未定义的行为 . 未定义行为的一种可能表现是代码可能看起来“正常” . 换句话说,你很幸运 .

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

相关问题