O cancelamento de referência do ponteiro nulo é válido na operação sizeof [duplicate]
Esta pergunta já tem uma resposta aqui:
Por que meu programa seg falha quando desreferencia um ponteiro NULL dentro do mallo 4 respostasEncontrei um trecho de código que, para mim, deveria travar com umfalha de segmentaçã e, no entanto, funciona sem problemas. O código em questão, mais a estrutura de dados relevante, é o seguinte (com comentários associados encontrados logo acima):
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]));
}
Por que isso funciona? Acho que otamanho d aCaractere * resolverá o tamanho do ponteiro na arquitetura fornecida, mas ele não deve travar e queimar enquanto desreferencia umNULL
-pointer?