c - 初始化为非局部指针后从函数返回指针

标签 c pointers scope

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

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

但是如果指针在函数调用之外分配并作为输入传入怎么办。然后在函数调用内部创建一个局部指针,初始化为输入指针,用于设置一些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;
}

由于new_p_x 是 使用p_x 初始化的,并且p_x 的生命周期与modify_p_x 函数调用无关,所以使这段代码安全?

谢谢。

最佳答案

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

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

关于c - 初始化为非局部指针后从函数返回指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33287291/

相关文章:

c - 初始化元素不是常量

处理分隔符和“在 csv 内容中”的 C 代码

无法使用Printf!?! (使用 mhash 执行哈希算法时)

c++ - 带矩阵存储偏移

Java使用extends访问变量

c - 加载使用 Glade 创建的文件时 GTK-Builder 内存泄漏

c - 如何修复这个简单的加密程序中的段错误?

ios - Objective-C 中的调用方法层次结构

Javascript 变量作用域

c - 双向链表: Incompatible pointer types