以下C代码 - 结构和指针有什么问题

Num*_*tor 0 c struct pointers

以下功能有问题:

typedef struct Data1{
float result;
struct Data1* next;

} Data; 



Data* f(Data* info){
    Data item;
    item.result=info->result;
    item.next=info->next;

    return &item; 

}
Run Code Online (Sandbox Code Playgroud)

我在这里注意到两件事:

  1. 返回的值是本地值的指针.但它仍然是一个指针 - 编译器发出警告:函数返回局部变量的地址.但它真的会成为一个问题吗?(我本身不返回本地值)
  2. 我相信这里的主要问题是这个函数假设复制Data结构.结果值是可以的,但对于'下一个'指针,我相信在函数调用结束时指针不会被改变,我是否正确?这就像在外部函数中均衡两个int,应该*(item.next)=*(info->next);解决问题?

那么这里的主要问题是什么?是1还是2?

Dan*_*her 9

返回的值是本地值的指针.但它仍然是一个指针 - 编译器发出警告:函数返回局部变量的地址.但它真的会成为一个问题吗?(我本身不返回本地值)

这是主要问题.函数返回后,局部变量不再存在.它占用的空间可能会立即或稍后被覆盖,但您不能指望从该地址读取有意义的数据.

如果要复制内容,则必须返回指向malloc内存的指针.

Data* f(Data* info){
    Data *item = malloc(sizeof *item);
    item->result=info->result;
    item->next=info->next;

    return item; 

}
Run Code Online (Sandbox Code Playgroud)

但这有一个缺点,就是现在调用者必须free分配的内存f,所以

Data* f(Data* info, Data* item){
    item->result=info->result;
    item->next=info->next;

    return item; 

}
Run Code Online (Sandbox Code Playgroud)

使用调用者分配的指针.