为什么这个函数返回垃圾值

h4c*_*k3d 0 c pointers function

我正在编写一个程序并面临这个问题,以下函数用于返回垃圾值:

int* foo(int temp){
   int x = temp;
   return &x;
}
Run Code Online (Sandbox Code Playgroud)

当我修改它时,它工作正常:

int* foo(int *temp){
    int *x = temp;
    return x
}
Run Code Online (Sandbox Code Playgroud)

第一个版本出了什么问题?

pb2*_*b2q 7

第一个版本返回对局部变量x的引用,该局部变量的存储仅限于该函数foo.当功能退出时,x无法再使用.返回对它的引用是悬空指针的一个实例.

在第二个版本中,您实际上只是传入并返回相同的指针值,该值指的是不受函数生命周期限制的内存.因此,即使在函数退出后,返回的地址仍然有效.

另一种选择:

int *foo(int temp)
{
    int *x = malloc(sizeof(int));
    *x = temp;
    return x;
}
Run Code Online (Sandbox Code Playgroud)