Вы используете то, что называется массивом переменной длины , однако есть проблема. В C каждая структура должна иметь определенную длину байта, так что, например, sizeof(struct image)
можно оценить. В вашем случае размер массива переменной длины не может быть определен во время компиляции, поэтому он является незаконным.
В другом случае вам, вероятно, нужны указатели вместо массивов объявленной длины:
typedef struct image
{
int width;
int heigth;
struct pixel **pixels;
};
Отказ от ответственности: ВЛАСы в структурах иногда допускаются, хотя это вопрос, если это расширение является скорее ошибкой, чем функцией. См.: Недокументированное расширение GCC: VLA в struct
Изменить: remyabel указывает на документы GCC, которые говорят о редких ситуациях, в которых VLAs в структурах в порядке: https: //gcc.gnu.org/onlinedocs/gcc/Variable-Length.html#Variable-Length