gpt4 book ai didi

c - 你如何在函数内部使用 struct 的 malloc?

转载 作者:行者123 更新时间:2023-12-02 16:08:58 30 4
gpt4 key购买 nike

在这段代码中,

#include <stdio.h>
#include <stdlib.h>

typedef struct test
{
int i;
double data;
} test;

void add(ar) struct test *ar;
{
int num = 10;
// *ar = malloc(num * sizeof(struct test)); // Adding this
for (int i = 0; i < num; i++)
{
ar[i].i = i;
ar[i].data = i * i;
}
}

int main(void)
{
test ar[10]; // Removing this
add(&ar);

for (int i = 0; i < 10; i++)
{
printf("%d %f\n", ar[i].i, ar[i].data);
}
return 0;
}

我们如何在 main 中定义 struct 而在 function 中分配内存?

我想在函数 add 中设置数字 (num),因为它在 main 中还未知。

最佳答案

您必须从 add() 传回两个值至 main() , nummalloc()编辑数组本身。由于您只能返回一个值,因此有两个优点:

a) 返回 num 并得到一个 test **传回数组的参数

int add( struct test **ar )
{
int num = 10;

*ar = malloc( num * sizeof **ar );
// initialize everything, you have to replace ar[i] by (*ar)[i]
return num;
}

调用它

struct test *ar;
int num = add( &ar );

b) 返回数组并得到一个 int *传回参数 num

struct test *add( int *num )
{
*num = 10;

struct test *ar = malloc( *num * sizeof *ar );
// initialize everything as you do now
return ar;
}

调用它

 int num;
struct test *ar = add( &num );

正如@Bodo 提到的,无论哪种方式,您都必须调用 free( ar );main()当你不需要 ar了。您可以直接调用它或考虑使用像 free_test( struct test *ar, int num ); 这样的清理功能就可以了。如果您有更多 malloc(),这样的功能特别有用s 为单个结构元素分配内存(例如,如果它们包含 char * 元素来存储字符串)。

关于c - 你如何在函数内部使用 struct 的 malloc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68560225/

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