Выделение структуры с гибким членом массива

Это код C99:

typedef struct expr_t
{
    int n_children; 
    foo data; // Maybe whatever type with unknown alignment
    struct expr_t *children[];
} expr_t;

Теперь, как мне выделить память?

expr_t *e = malloc (sizeof (expr_t) + n * sizeof (expr_t *));

или же?

expr_t *e = malloc (offsetof (expr_t, children) + n * sizeof (expr_t *));

Являетсяsizeof даже гарантированно работать с типом с гибким членом массива (GCC принимает это)?

Ответы на вопрос(2)

Ваш ответ на вопрос