Ist dereferenzierender Nullzeiger in der Betriebsgröße gültig [duplizieren]

Diese Frage hat hier bereits eine Antwort:

Warum ist mein Programm nicht fehlerhaft, wenn ich einen NULL-Zeiger innerhalb von malloc dereferenziere? 4 Antworten

Ich bin auf einen Codeausschnitt gestoßen, der für mich mit einem @ abstürzen sollsegmentation fault, und doch funktioniert es reibungslos. Der fragliche Code und die relevante Datenstruktur lauten wie folgt (mit dem zugehörigen Kommentar oben):

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

Warum funktioniert das? Ich erfahre, dass dasGröße vo dasverkohle * wird in die Größe des Zeigers für die angegebene Architektur aufgelöst, sollte aber nicht abstürzen und brennen, während ein @ dereferenziert wirNULL-Zeiger

Antworten auf die Frage(3)

Ihre Antwort auf die Frage