Как рассчитать объем памяти, необходимый для структуры с переменной длиной?
учитывая структуру, такую как эта:
struct a {
int b;
int c;
my_t d[];
}
что я должен передать malloc выделить достаточно памяти для struct a здесь d и n элементов?
3 ответов
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