如何计算可变长度的结构所需的内存量?

时间:2012-11-17 21:11:58

标签: c malloc sizeof

给出这样的结构:

struct a {
    int b;
    int c;
    my_t d[];
}

我需要传递给malloc什么才能为struct a d n元素的{{1}}分配足够的内存?

3 个答案:

答案 0 :(得分:9)

struct a *var = malloc(sizeof(*var) + n*sizeof(var->d[0]))

使用sizeof的变量将确保在类型更改时更新大小。否则,如果您更改dvar的类型,则在忘记更新任何相应分配的情况下,如果不分配足够的内存,则可能会引入静默且可能难以查找的运行时问题。

答案 1 :(得分:5)

您可以使用例如:sizeof(struct a) + sizeof(my_t [n])

typedef int my_t;

struct a {
  int b;
  int c;
  my_t d[];
};

int n = 3;

main(){
  printf("%zu %zu\n", sizeof(struct a), sizeof(my_t [n]));
}

结果:8 12

答案 2 :(得分:4)

这应该足够了:

sizeof(a) + n * sizeof(my_t)
相关问题