このような構造体が与えられた場合:
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)