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

fuz*_*fuz 8 c malloc sizeof

给出这样的结构:

struct a {
    int b;
    int c;
    my_t d[];
}
Run Code Online (Sandbox Code Playgroud)

我需要传递什么来malloc为有元素的struct a地方分配足够的内存?dn

Kev*_*vin 9

struct a *var = malloc(sizeof(*var) + n*sizeof(var->d[0]))
Run Code Online (Sandbox Code Playgroud)

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

  • 当您更改类型时,@ pascual更改编译器错误并忘记更新而不是静默运行时错误. (3认同)

Pas*_*uoq 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]));
}
Run Code Online (Sandbox Code Playgroud)

结果:8 12