Я натолкнулся на фрагмент кода, который для меня должен произойти с ошибкой сегментации, и все же он работает без сбоев. Код, о котором идет речь, плюс соответствующая структура данных выглядит следующим образом (с соответствующим комментарием, найденным справа):
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]));
}
Почему это работает? Я понимаю, что размер char * будет определять размер указателя на заданную архитектуру, но не должен ли он разбиваться и записываться при разыменовании NULL
-pointer?