我必须从另一个函数中分配一个结构,显然是使用指针。我已经盯着这个问题看了好几个小时,并尝试了上百万种不同的方法来解决它。
这是一些示例代码(非常简化):
...
some_struct s;
printf("Before: %d\n", &s);
allocate(&s);
printf("After: %d\n", &s);
...
/* The allocation function */
int allocate(some_struct *arg) {
arg = malloc(sizeof(some_struct));
printf("In function: %d\n", &arg);
return 0;
}
这确实在分配调用之前和之后给了我相同的地址:
Before: -1079752900
In function: -1079752928
After: -1079752900
我知道这可能是因为它在函数中创建了一个副本,但我不知道如何实际处理我作为参数给出的指针。我尝试定义 some_struct *s 而不是 some_struct s,但没有运气。我试过:
int allocate(some_struct **arg)
这工作得很好(分配函数也需要更改),但根据分配我可能不会更改声明,它必须是 *arg .. 如果我只需要声明,那将是最正确的some_struct s.. 不是 some_struct *s。分配函数的目的是初始化一个结构体(a some_struct),其中也包括分配它。
还有一件事我忘了提。分配函数中的返回 0 是为某些状态消息保留的,因此我无法使用它返回地址。