初始化后将指针从函数返回到非本地指针

时间:2015-10-22 17:43:40

标签: c pointers scope

我认为我所做的事情是安全的,但我想首先与所有聪明的人核对。

我知道从函数返回指向局部变量的指针是坏的!

但是如果指针在函数调用之外分配并作为输入传入,该怎么办?然后在函数调用内部生成一个本地指针,初始化为输入指针,用于设置一些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_xp_x的生命周期与modify_p_x函数调用无关,是否可以使此代码安全?

感谢。

1 个答案:

答案 0 :(得分:2)

本地指针没有错;问题是返回指向本地事物的指针。回想为什么这很糟糕:当函数返回时,该东西使用的内存可以重新用于其他事情。

modify_p_x指向x(在main中分配),使用它来更改x,然后返回指针,main然后重新分配给p_x。除了如何使用它之外,这与使用int而不是指针的情况没什么不同,我也不认为您曾担心返回int变量。