按地址返回[重复]

问题描述 投票:-4回答:2
int * foo()
{
  int b=8;
  int * temp=&b;
  return temp;
}

我有几个问题,

  1. 内存布局的哪一部分* p存在。
  2. 我正在将局部变量地址复制到临时指针而不分配内存。但即使这样它也存储了局部变量的地址,它是如何实现的?
  3. 该程序对我来说很好,当我取消引用它(局部变量肯定不会在那里)为什么我仍然得到这个值。

真的不明白。任何人都可以详细解释我上面的所有查询。

c
2个回答
3
投票

内存布局的哪一部分* p存在。

你的程序中没有p

我正在将局部变量地址复制到临时指针而不分配内存。但即使这样它也存储了局部变量的地址,它是如何实现的?

局部变量有一个地址。你可以退回那个地址。

该程序对我来说很好,当我取消引用它(局部变量肯定不会在那里)为什么我仍然得到这个值。

带有错误的代码会做出你不期望的奇怪事情。修复错误,神秘感将会消失。


3
投票

在函数外部访问返回的地址时,返回局部变量的地址会导致未定义的行为。

变量b的生命周期就在函数foo()中,它不能比该函数寿命更长,因此访问该函数内的位置很好,但是你不能返回它的地址并在函数外部访问它。

© www.soinside.com 2019 - 2024. All rights reserved.