Как рассчитать объем памяти, необходимый для структуры с переменной длиной?
учитывая структуру, такую как эта:
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