【发布时间】: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_x 和p_x 初始化的new_p_x is 具有生命周期,而与modify_p_x 函数调用无关,这是否使这段代码安全?
谢谢。
【问题讨论】:
-
这不是代码审查网站!您是否遇到过该代码的任何问题? (对我来说看起来不错)。注意总是启用编译器警告。
-
你原来的前提已经错了。 “我知道从函数返回本地指针不好”?谁告诉你的?注意到“返回本地指针”本质上是不好的。事实上,指针本身是否是本地的完全无关紧要。唯一重要的是对象指针指向的“本地”程度。
-
对不起,我的意思是返回一个指向局部变量的指针。从函数返回后,局部变量不再存在。