Кто-нибудь знает, есть ли способ инициализировать структуру, содержащую массив переменной длины, без предварительной инициализации массива в отдельной переменной (и без использования malloc)?
Моя структура выглядит так:
struct my_struct {
int *values;
int size;
}
На данный момент в моем коде у меня есть это:
void my_function (int size) {
int values[size];
struct my_struct mystr = {
.values = values,
.size = size
};
...
}
(Сначала инициализируется массив, затем структура. Это работает, но выглядит неудобно объявлять отдельную переменную для массива.)
Вероятно, это тоже сработает:
void my_function (int size) {
struct my_struct mystr = {
.values = calloc (size, sizeof (int)),
.size = size
};
...
}
(но я не хочу использовать mallocs)
Но то, что я хотел бы написать, это что-то вроде:
void my_function (int size) {
struct my_struct mystr = {
.values = (int[size]){},
.size = size
};
...
}
Есть идеи?
int values[size];
. - person FClad   schedule 22.07.2016.values
значением NULL и укажите реальное значение при выделении памяти. - person GMichael   schedule 22.07.2016int * values;
— это указатель наint
, а не массив и даже не VLA. - person alk   schedule 22.07.2016malloc
для экономии драгоценного пространства в стеке. На самом деле это не должно иметь существенного значения, если вы не усложняете расположение кеша. Для начала прекратите использовать указатель для ссылки на другой фрагмент памяти. Вместо этого используйте гибкий элемент массива. - person autistic   schedule 22.07.2016