Стандарт C99 позволяет создавать элементы гибкого массива, такие как
typedef struct pstring {
size_t length;
char string[];
} pstring;
. Затем он инициализируется чем-то вроде pstring* s = malloc(sizeof(pstring) + len)
.Допустимо ли для len
быть ноль?Казалось бы, это согласованно, и было бы неплохо время от времени экономить место (вероятно, не с примером pstring
, конечно).С другой стороны, я понятия не имею, что будет делать следующий код:
pstring* s = malloc(sizeof(pstring));
s->string;
Это также похоже на то, что может работать с одним компилятором, а не с другим, или с одной ОС, а не с другойили в один день, а не в другой, поэтому я действительно хочу узнать, что об этом говорит стандарт .Это malloc
в примере кода с неопределенным поведением, или это только доступ к s->string
, который является недопустимым, или это что-то совсем другое?