我定义了这种类型:
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)
动态分配类型&#39;元素&#39;的数组的正确方法是什么?所以我可以访问数组中每个元素的成员吗?
答案 0 :(得分:0)
请确保您在第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].tag
和pv[i].id
为dangling 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
上工作。