8

このような構造体が与えられた場合:

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

に要素がある場所mallocに十分なメモリを割り当てるには、何を渡す必要がありますか?struct adn

4

3 に答える 3

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

の変数を使用するsizeofと、タイプが変更された場合にサイズが確実に更新されます。そうしないと、タイプを変更しdたりvar、対応する割り当ての更新を忘れた場合に十分なメモリを割り当てないことで、サイレントで見つけにくいランタイムの問題が発生するリスクがあります。

于 2012-11-17T21:19:19.000 に答える
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

于 2012-11-17T21:17:20.860 に答える
4

これで十分です:

sizeof(a) + n * sizeof(my_t)
于 2012-11-17T21:17:17.713 に答える