C 初始化为非本地指针后从函数返回指针
我认为我所做的是安全的,但我想先和你们这些聪明人核实一下 我知道从函数返回指向局部变量的指针是不好的 但是,如果指针被分配到函数调用之外并作为输入传入,该怎么办呢。然后在函数调用内部生成一个本地指针,初始化为输入指针,用于设置一些C 初始化为非本地指针后从函数返回指针,c,pointers,scope,C,Pointers,Scope,我认为我所做的是安全的,但我想先和你们这些聪明人核实一下 我知道从函数返回指向局部变量的指针是不好的 但是,如果指针被分配到函数调用之外并作为输入传入,该怎么办呢。然后在函数调用内部生成一个本地指针,初始化为输入指针,用于设置一些struct->members,然后returned 下面是一个使用(int*)而不是我的代码(struct type.*)的示例: 由于new\u p\u x是使用p\u x初始化的,p\u x的生命周期与modify\u p\u x函数调用无关,因此该代码是否安全
struct->members
,然后return
ed
下面是一个使用(int*)
而不是我的代码(struct type.*)
的示例:
由于new\u p\u x是使用p\u x
初始化的,p\u x
的生命周期与modify\u p\u x
函数调用无关,因此该代码是否安全
谢谢。本地指针没有问题;问题在于返回指向本地对象的指针。回想一下这是为什么不好:当函数返回时,该对象使用的内存可以重新用于其他对象
modify\u p\u x
被赋予一个指向x
(在main
中分配)的指针,使用它来更改x
,并返回该指针,该指针main
然后重新分配给p\u x
。除了它的使用方式外,这与使用int
s而不是指针没有什么不同,而且我认为您从未担心过返回int
变量。这不是代码审查站点!您在使用该代码时遇到过任何问题吗?(我看没问题)。注意:始终启用编译器警告。您的原始前提已经错误。“我知道从函数返回本地指针是不好的”?谁告诉你的?“返回本地指针”本身并没有什么不好的地方。事实上,指针本身是否是本地的完全无关。唯一重要的是指针指向的对象的“局部”程度。对不起,我的意思是返回指向局部变量的指针。从函数返回后,局部变量不再存在。
int *modify_p_x(int *p_x)
{
int *new_p_x = p_x;
*new_p_x = 100;
return new_p_x;
}
int main(int argc, char **argv)
{
int x = 42;
int *p_x = &x;
p_x = modify_p_x(p_x);
return 0;
}