Разыменование нулевого указателя допустимо в операции sizeof [duplicate]

На этот вопрос уже есть ответ:

Почему моя программа не вызывает ошибку, когда я разыменую нулевой указатель внутри malloc? 4 ответа

Я натолкнулся на фрагмент кода, который, по-моему, должен завершиться с ошибка сегментации, и все же это работает без помех. Рассматриваемый код плюс соответствующая структура данных выглядит следующим образом (соответствующий комментарий находится справа вверху):

typedef struct {
  double length;
  unsigned char nPlaced;
  unsigned char path[0];
}


RouteDefinition* Alloc_RouteDefinition()
{
  // NB: The +nBags*sizeof.. trick "expands" the path[0] array in RouteDefinition
  // to the path[nBags] array
  RouteDefinition *def = NULL;
  return (RouteDefinition*) malloc(sizeof(RouteDefinition) + nBags * sizeof(def->path[0]));
}

Почему это работает? Я понимаю, чразме the Символ * разрешается до размера указателя в данной архитектуре, но не должен аварийно завершить работу и сгореть при разыменованииNULL-указатель

Ответы на вопрос(3)

Ваш ответ на вопрос