给出这样的结构:
struct a {
int b;
int c;
my_t d[];
}
我需要传递给malloc
什么才能为struct a
d
n
元素的{{1}}分配足够的内存?
答案 0 :(得分:9)
struct a *var = malloc(sizeof(*var) + n*sizeof(var->d[0]))
使用sizeof
的变量将确保在类型更改时更新大小。否则,如果您更改d
或var
的类型,则在忘记更新任何相应分配的情况下,如果不分配足够的内存,则可能会引入静默且可能难以查找的运行时问题。
答案 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)