gpt4 book ai didi

c - 另一个函数内的 Malloc

转载 作者:行者123 更新时间:2023-12-01 23:15:03 26 4
gpt4 key购买 nike

我必须从另一个函数中分配一个结构,显然是使用指针。我已经盯着这个问题好几个小时了,并尝试了一百万种不同的方法来解决它。

这是一些示例代码(非常简化):

...
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),其中还包括分配它。

还有一件事我忘了提。 allocate 函数中的返回 0 是为某些状态消息保留的,因此我无法使用它返回地址。

最佳答案

通常,我会从 allocate 返回指针:

void * allocate()
{
void * retval = malloc(sizeof(some_struct));
/* initialize *retval */
return retval;
}

如果你想在参数中返回它,你必须传递一个指向该参数的指针。由于这是指向 some_struct 的指针,因此您必须将指针传递给指针:

void allocate (some_struct ** ret)
{
*ret = malloc(sizeof(some_struct));
/* initialization of **ret */
return;
}

被称为

some_struct *s;
allocate(&s);

关于c - 另一个函数内的 Malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2601336/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com