gpt4 book ai didi

c - 在 C 上分配结构的动态数组。

转载 作者:太空宇宙 更新时间:2023-11-04 07:36:26 25 4
gpt4 key购买 nike

在 C 上分配结构的动态数组。Valgrind 发现此错误:使用大小为 8 的未初始化值。尝试访问结构成员时弹出错误。

有什么办法可以避免?

void find_rate()
{
int num_lines = 0;
FILE * in;
struct record ** data_array;
double * distance;
struct record user_record;

in = open_file();

num_lines = count_lines(in);

allocate_struct_array(data_array, num_lines);

data_array[0]->community_name[0] = 'h'; // the error is here
printf("%c\n", data_array[0]->community_name[0]);

fclose(in);
}

FILE * open_file()
{
..... some code to open file
return f;
}

int count_lines(FILE * f)
{
.... counting lines in file
return lines;
}

这是我分配数组的方式:

void allocate_struct_array(struct record ** array, int length)
{
int i;

array = malloc(length * sizeof(struct record *));

if (!array)
{
fprintf(stderr, "Could not allocate the array of struct record *\n");
exit(1);
}

for (i = 0; i < length; i++)
{
array[i] = malloc( sizeof(struct record) );

if (!array[i])
{
fprintf(stderr, "Could not allocate array[%d]\n", i);
exit(1);
}
}
}

最佳答案

由于您将数组的地址传递给函数 allocate_struct_array

你需要:

*array = malloc(length * sizeof(struct record *));

并且在调用函数中,您需要将data_array 声明为:

struct record * data_array;

并将其地址传递为:

allocate_struct_array(&data_array, num_lines);

关于c - 在 C 上分配结构的动态数组。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8455099/

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