我可以返回主函数的本地指针吗? [复制]

2023-12-02

我编写了一个函数 f() 以返回指向主函数的本地指针。 我知道f()函数执行后内存将被释放。然而f()函数可以返回指向a[2]数组的指针。我认为a[2]应该被释放,但它仍然存在。

所以我想知道我是否可以编写一个可以返回局部指针并且局部指针指向函数中的局部变量的函数? 如果可以返回,为什么a[2]数组在f()函数结束后不会被释放?

#include <stdio.h>

int* f()
{
  int a[2] = {1, 2};
  int* p = a;
  printf("%p\n", p);
  return p;
}

int main(void)
{
  int* p = f();
  printf("%p\n", p);
  return 0;
}

由于您指向的数组将超出范围并不再存在,因此尝试取消引用返回的指针将导致未定义的行为.

However,实际上内存仍然存在,并且如果后面的函数调用没有覆盖任何内容,那么它仍然会原封不动地存在。因此,如果您尝试取消引用指针,您仍然会看到数据。但是你不应该那样做!

关于你正在做的事情,你实际上并没有取消引用指针,所以你don't有UB。您所做的就是打印指针本身的值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以返回主函数的本地指针吗? [复制] 的相关文章

随机推荐