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

标签 c pointers memory-management function-pointers

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

#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。

最佳答案

函数 foo1foo2 的行为在 C 和 C++ 中都是未定义

您不能取消引用一个指向不再在范围内的具有自动存储持续时间的变量的指针。

明天,foo2() 也可能会给您一个错误。或者编译器可能会吃掉你的猫。

关于C - 返回局部指针与局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44631089/

相关文章:

iphone - 尝试将 NSUInteger 与枚举一起使用 (<<)

c - 打印字符串时出现意外错误

c - 为什么我的内存布局不同?

memory - 两个进程可以共享相同的 GPU 内存吗? (CUDA)

c - 编译器完成动态和堆栈内存分配?

c++ - 静态多维数组 (C/C++)

c - 使用常量值时部分宏被优化掉

c - 指或不指

c - 为什么代码会泄漏内存?

iphone - UITableViewCells 中缩略图的内存处理