Por que a des-referência NULL neste trecho C não causa comportamento indefinido

Me deparei com um pedaço de código onde NULL é tipecast para um tipo de ponteiro de estrutura(foo *) 0e, com esse ponteiro, de-referenciar um membro((foo *)0)->me usando o endereço desse&(((foo *)0)->m)) e digite convertê-lo em número inteiro para obter o índice de memória desse membro na estrutura.((unsigned int)(&(((foo *)0)->m))).

Que eu saiba, a desreferência de ponteiro NULL sempre deve resultar em uma falha de segmentação em C. Mas não entendo como o ponteiro NULL pode ser des-referenciado dessa maneira e ainda não resultar em uma falha de segmentação.

#include <stdio.h>
#define  MACRO(m) ((unsigned int)(&(((foo *)0)->m)))

typedef struct
{
int a;
int b;
int c;
int d;
}foo;

int main(void) {
    printf("\n  %d  ", MACRO(c));
    return 0;
}

questionAnswers(1)

yourAnswerToTheQuestion