如何动态分配' typedef struct'元素?

时间:2014-09-21 18:57:52

标签: c dynamic typedef allocation

我定义了这种类型:

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;的数组的正确方法是什么?所以我可以访问数组中每个元素的成员吗?

1 个答案:

答案 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].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上工作。