以下功能有问题:
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)
我在这里注意到两件事:
*(item.next)=*(info->next);解决问题?那么这里的主要问题是什么?是1还是2?
返回的值是本地值的指针.但它仍然是一个指针 - 编译器发出警告:函数返回局部变量的地址.但它真的会成为一个问题吗?(我本身不返回本地值)
这是主要问题.函数返回后,局部变量不再存在.它占用的空间可能会立即或稍后被覆盖,但您不能指望从该地址读取有意义的数据.
如果要复制内容,则必须返回指向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)
使用调用者分配的指针.
| 归档时间: |
|
| 查看次数: |
598 次 |
| 最近记录: |