c -单个指针可以在函数中初始化,如果可以,如何初始化?



我已经给出了这个函数原型void create_smth(smth* s),它被要求这个函数创建,初始化并返回一个smith变量。这可能吗?据我所知,我需要一个双指针来做这样的事情。我在这个函数中做的是

s=(smth*)malloc(sizeof(smth));

这可能是错误的。

In my main I have try

smth* smth1=NULL;
create_smth(smth1);

smth smth1;
create_smth(&smth1);

但我的代码一直崩溃(分割错误;核心转储)。我开始怀疑这是否是教练的错误,但我觉得直接问他很愚蠢,但这个练习需要我上面所说的。谢谢所有人。

看起来像是老师的错误。您是正确的,void create_smth(smth* s)原型不能返回值,无论是在传统的return意义上(它是void),还是使用双指针。只有两种方法:

smth* creat_smth()
{
smth* mySmth = malloc(sizeof *mySmth);
// check malloc return valid pointer, initialize fields with mySmth->
return mySmth;
}
int main(void)
{
smth* smth1 = creat_smth();
...
return 0;
}

void creat_smth(smth** mySmth)
{
*mySmth = malloc(sizeof **mySmth);
// check malloc returned valid pointer, initialize fields with (*mySmth)->
}
int main(void)
{
smit* smth1;
creat_smth(&smth1);
...
return 0;
}

值得向你的导师澄清一下。也就是说,遵循模式int init_smth(smth *x)的函数至少在某种程度上是常见的——但请注意名称:这样的函数通常称为init_•,而不是create_•(因为它为这个对象创建存储,它只是填充它)。

当期望对结构体进行堆栈分配是正确的事情时,这是有意义的。而不是使用malloc,用户将传递一个指向本地分配结构体的指针:

smth my_smth;
init_smth(&my_smth);

init_smth内部会发生一些中等复杂的初始化(但是没有malloc

:对象的内存已经分配了)。然而,即使这样,函数更常见的是返回一个状态码,表示成功(因此在上面的原型中返回类型为int)。

相关内容

  • 没有找到相关文章

最新更新