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 odpowiedziNatknął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