小编ymd*_*tta的帖子

C - 返回本地指针与局部变量

我的问题是关于这两种情况:

#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;
}
Run Code Online (Sandbox Code Playgroud)

case1: 当它是foo1()的情况时,我们得到一个错误,因为我们试图将一个地址副本返回给main,其数据已被删除(当我们退出foo1()函数时)

case2:但是在foo2()中,虽然我们将一个副本返回到一个局部变量的指针,但是在我们退出foo2()函数后它们的数据将被删除,但它没有给出错误,为什么会这样呢?

TL; DR:为什么foo2()不会给出错误但是foo1()呢?

TIA.

c pointers memory-management function-pointers

0
推荐指数
1
解决办法
618
查看次数