gpt4 book ai didi

c - 我应该返回函数中的指针以便我可以使用它们吗?例如,我应该返回 table2_entry 吗?

转载 作者:行者123 更新时间:2023-11-30 19:47:04 25 4
gpt4 key购买 nike

我的结构如下所示:

struct table2
{
int k;
float value;
int row;
int col;
int nextK_row;
int nextK_col;
};
int allocate(int k, int n, struct table2 *table2_entry,struct table3 *table3_entry)
{
//allocate memory to table2
table2_entry=(struct table2*)malloc((sizeof(struct table2))*k);
if(table2_entry==0)
{
printf("Out of memory\n");
return 1;
}
table3_entry=(struct table3*)malloc((sizeof(struct table3))*n);
if(table3_entry==0)
{
printf("Out of memory\n");
return 1;
}
return 0;
}

如果我在主函数中执行此操作:

for(i=1;i<=k;i++)
{
fscanf(source,"%d %f %d %d %d %d", &(table2_entry[i]).k,&(table2_entry[i]).value,&(table2_entry[i]).row,&(table2_entry[i]).col,&(table2_entry[i]).nextK_row,&(table2_entry[i]).nextK_col);
printf("%f\n",(table2_entry[i]).value);
}

有效果吗?或者我只是在监督什么?请帮助我。 :(

最佳答案

为了让 allocate 的调用者能够使用其中分配的内存,您必须将该函数更改为如下所示:

int allocate(int k, int n,
struct table2 **table2_entry,
struct table3 **table3_entry)
{
//allocate memory to table2
*table2_entry=(struct table2*)malloc((sizeof(struct table2))*k);
if(table2_entry==0)
{
printf("Out of memory\n");
return 1;
}

*table3_entry=(struct table3*)malloc((sizeof(struct table3))*n);
if(table3_entry==0)
{
printf("Out of memory\n");
return 1;
}
return 0;
}

然后,在另一个函数中,可以这样调用它:

struct table2 *table2_entry = NULL;
struct table3 *table3_entry = NULL;
allocate(10, 3, &table2_entry, &tabl3_entry);

对于您拥有的版本,allocate 中分配的内存是泄漏。客户端代码无法获取它,因为指针是按值传递的。

关于c - 我应该返回函数中的指针以便我可以使用它们吗?例如,我应该返回 table2_entry 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22727720/

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