我的问题是关于这两种情况:
#include <stdio.h>
int *foo1();
int *foo2();
int main()
{
printf("so it's %d\n",*foo1());
printf("so it's %d\n",*foo2());
}
int *foo1()
{
int i1 = 5;
return &i1;
}
int *foo2()
{
int i2 = 5;
int *p = NULL;
p = &i2;
return p;
}
case1:当它是 foo1() 的情况时,我们得到一个错误,因为我们试图将地址的副本返回给数据已被删除的 main(当我们退出 foo1() 函数时)
case2: 但是在 foo2() 中,它不会给出错误,尽管我们返回一个局部变量指针的副本,其数据将在之后被删除我们退出 foo2() 函数,为什么会这样?
TL;DR:为什么 foo2() 不报错而 foo1() 报错?
TIA。
最佳答案
函数 foo1
和 foo2
的行为在 C 和 C++ 中都是未定义。
您不能取消引用一个指向不再在范围内的具有自动存储持续时间的变量的指针。
明天,foo2()
也可能会给您一个错误。或者编译器可能会吃掉你的猫。
关于C - 返回局部指针与局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44631089/