我可以返回主函数的本地指针吗?

ray*_*ray 1 c pointers

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

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

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

Som*_*ude 8

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

但是,在实践中,内存仍然存在,如果以后的函数调用都没有覆盖任何内容,它仍然会保持不变.因此,如果您尝试取消引用指针,您仍将看到数据.但你不应该这样做!

关于你正在做什么,你实际上并没有取消引用指针,所以你没有 UB.你所要做的就是打印指针本身的值.