O cancelamento de referência do ponteiro nulo é válido na operação sizeof [duplicate]

Esta pergunta já tem uma resposta aqui:

Por que meu programa seg falha quando desreferencia um ponteiro NULL dentro do mallo 4 respostas

Encontrei um trecho de código que, para mim, deveria travar com umfalha de segmentaçã e, no entanto, funciona sem problemas. O código em questão, mais a estrutura de dados relevante, é o seguinte (com comentários associados encontrados logo acima):

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]));
}

Por que isso funciona? Acho que otamanho d aCaractere * resolverá o tamanho do ponteiro na arquitetura fornecida, mas ele não deve travar e queimar enquanto desreferencia umNULL -pointer?

questionAnswers(3)

yourAnswerToTheQuestion