【发布时间】:2012-11-17 21:11:57
【问题描述】:
给定一个这样的结构:
struct a {
int b;
int c;
my_t d[];
}
我必须将什么传递给malloc 才能为struct a 其中d 具有n 元素分配足够的内存?
【问题讨论】:
给定一个这样的结构:
struct a {
int b;
int c;
my_t d[];
}
我必须将什么传递给malloc 才能为struct a 其中d 具有n 元素分配足够的内存?
【问题讨论】:
struct a *var = malloc(sizeof(*var) + n*sizeof(var->d[0]))
使用sizeof 的变量将确保在类型更改时更新大小。否则,如果您更改 d 或 var 的类型,如果您忘记更新任何相应的分配,则可能会因未分配足够的内存而引入静默且可能难以发现的运行时问题。
【讨论】:
您可以使用例如: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
【讨论】:
这就够了:
sizeof(a) + n * sizeof(my_t)
【讨论】: