【问题标题】:Returning pointer from function after being initialized to non-local pointer初始化为非本地指针后从函数返回指针
【发布时间】:2016-01-22 02:26:32
【问题描述】:

我认为我正在做的事情是安全的,但我想先和你们所有聪明人核实一下。

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

但是,如果在函数调用之外分配指针并作为输入传入会怎样。然后在函数调用里面做了一个本地指针,初始化为输入指针,用来设置一些struct->members,然后returned?

这是一个使用(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;
}

由于使用p_xp_x 初始化的new_p_x is 具有生命周期,而与modify_p_x 函数调用无关,这是否使这段代码安全?

谢谢。

【问题讨论】:

  • 这不是代码审查网站!您是否遇到过该代码的任何问题? (对我来说看起来不错)。注意总是启用编译器警告。
  • 你原来的前提已经错了。 “我知道从函数返回本地指针不好”?谁告诉你的?注意到“返回本地指针”本质上是不好的。事实上,指针本身是否是本地的完全无关紧要。唯一重要的是对象指针指向的“本地”程度。
  • 对不起,我的意思是返回一个指向局部变量的指针。从函数返回后,局部变量不再存在。

标签: c pointers scope


【解决方案1】:

本地指针没有错;问题在于返回一个指向本地事物的指针。回想一下为什么这是不好的:当函数返回时,那个东西使用的内存可以重新用于其他东西。

modify_p_x 被赋予一个指向x 的指针(在main 中分配),使用它来更改x,并返回该指针,main 然后重新分配给p_x。除了它的使用方式之外,这与您使用 ints 而不是指针没有什么不同,而且我认为您不必担心返回 int 变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    • 2015-11-02
    • 1970-01-01
    相关资源
    最近更新 更多