我认为我所做的事情是安全的,但我想首先与所有聪明的人核对。
我知道从函数返回指向局部变量的指针是坏的!
但是如果指针在函数调用之外分配并作为输入传入,该怎么办?然后在函数调用内部生成一个本地指针,初始化为输入指针,用于设置一些struct->members
,然后return
编辑?
以下是使用(int *)
代替我的代码(struct type_s *)
的示例:
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;
}
由于使用new_p_x is
初始化的p_x
和p_x
的生命周期与modify_p_x
函数调用无关,是否可以使此代码安全?
感谢。
答案 0 :(得分:2)
本地指针没有错;问题是返回指向本地事物的指针。回想为什么这很糟糕:当函数返回时,该东西使用的内存可以重新用于其他事情。
modify_p_x
指向x
(在main
中分配),使用它来更改x
,然后返回指针,main
然后重新分配给p_x
。除了如何使用它之外,这与使用int
而不是指针的情况没什么不同,我也不认为您曾担心返回int
变量。