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 AntwortenIch 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