C语言 如何计算具有可变长度的结构所需的内存量



给定这样的结构:

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

我必须向malloc传递什么才能为d具有n元素的struct a分配足够的内存?

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

使用变量进行sizeof将确保在类型更改时更新大小。否则,如果更改dvar的类型,则在忘记更新任何相应的分配时,由于没有分配足够的内存,则可能会引入静默且可能难以发现的运行时问题。

例如,您可以使用: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 %zun", sizeof(struct a), sizeof(my_t [n]));
}

结果:8 12

这应该足够了:

sizeof(a) + n * sizeof(my_t)

相关内容

  • 没有找到相关文章