Czy odwołanie zerowego wskaźnika jest prawidłowe pod względem wielkości operacji [duplikat]

To pytanie ma już odpowiedź tutaj:

Dlaczego mój program nie segreguje, gdy wyłapuję wskaźnik NULL wewnątrz malloc? 4 odpowiedzi

Natknąłem się na fragment kodu, który według mnie powinien ulec awarii z błąd segmentacji, a jednak działa bez żadnych problemów. Kod, o którym mowa, oraz odpowiednia struktura danych są następujące (z powiązanym komentarzem zamieszczonym powyżej):

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

Dlaczego to działa? Rozumiem, żerozmia thezwęgla * rozwiąże rozmiar wskaźnika w danej architekturze, ale nie powinien się zawiesić i nagrać podczas dereferencjiNULL-wskaźnik

questionAnswers(3)

yourAnswerToTheQuestion