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)
第一个版本出了什么问题?
第一个版本返回对局部变量x的引用,该局部变量的存储仅限于该函数foo.当功能退出时,x无法再使用.返回对它的引用是悬空指针的一个实例.
在第二个版本中,您实际上只是传入并返回相同的指针值,该值指的是不受函数生命周期限制的内存.因此,即使在函数退出后,返回的地址仍然有效.
另一种选择:
int *foo(int temp)
{
int *x = malloc(sizeof(int));
*x = temp;
return x;
}
Run Code Online (Sandbox Code Playgroud)