gpt4 book ai didi

c - 如何动态分配 'typedef struct' 元素的数组?

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

我定义了这个类型:

typedef struct element
{
uint16_t value_raw;
float value_scaled;
char *tag;
char *id;
float scale;
} element;

我需要为文件全局声明这些类型的数组,因为同一文件中的一些其他函数需要访问它。但是在读取配置文件之前我不知道数组的大小,所以我需要动态分配它。我试过这个:

element *pv;

int main()
{
int i;
int size = findoutthesize();
pv = malloc(sizeof(element) * size);

/* and then access the elements like this */
for (i = 0; i < size; i++)
pv[i].scale = (float) i;
}

但它并没有完全按照我预期的方式工作......(所有 .scale 成员最终都是相同的值,即 size-1)

动态分配类型为“元素”的数组以便我可以访问数组中每个元素的成员的正确方法是什么?

最佳答案

您肯定在第 199 行和第 200 行有问题:

e.tag = tag; 
e.id = idbuf;

char tag[80]char idbuf[80] 是局部变量,因此 e.tag/e .id 指针仅在 get_element 函数结束前有效。

这里:

for (i = 0; i < modbus_read_count; i++) 
{
pv[i] = get_element(fp, line);
printf("tag=%s, id=%s, scale=%.1f\n", pv[i].tag, pv[i].id, pv[i].scale);
}

pv[i].tagpv[i].iddangling pointers .

您可以将您的 element 结构更改为如下内容:

typedef struct element
{
uint16_t value_raw;
float value_scaled;
char tag[80];
char id[80];
float scale;
} element;

并且,在 get_element 函数内,直​​接处理 e.tag/e.id

关于c - 如何动态分配 'typedef struct' 元素的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25962749/

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