gpt4 book ai didi

c - 为结构数组中的结构成员分配内存后写入无效

转载 作者:行者123 更新时间:2023-11-30 18:45:21 24 4
gpt4 key购买 nike

我需要将一个结构数组传递给一个函数,据我所知,我必须为整个结构数组以及数组内每个结构中的每个单独的结构成员分配内存。

我这样做的方式会导致 valgrind 出现无效的写入错误(在函数 read_file 内的第二行中引起)。怎么了?

typedef struct test
{
char *string1;
int num1;
int num2;
char *string2;
} Test;

static void read_file(Test *test)
{
test = (Test *)calloc(16, sizeof(test));
test[0].string1 = (char *)calloc(strlen("hello") + 1, sizeof(char));
}

int main(void)
{
int i = 0;
Test test[16];

for (i = 0; i < 16; i++)
{
memset(&test[i], 0, sizeof(test[i]));
test[i] = (Test) { "", 0, 0, "" };
}

read_file(test);
return 0;
}

PS:我知道我必须释放分配的内存,但首先我想让上面的代码工作。

最佳答案

test数组位于 main已经为其分配了内存。

然后将其传递到 read_file函数,因此不需要再次为其分配内存。删除这个:

test = (Test *)calloc(16, sizeof(test));

顺便说一句,您可能想要 sizeof(Test) (或者 sizeof(*test) )那里。 sizeof(test)sizeof(Test*) 相同,几乎可以肯定小于 sizeof(Test) .

关于c - 为结构数组中的结构成员分配内存后写入无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55001328/

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