Gravando no ponteiro fora dos limites após malloc () não causando erro

quando tento o código abaixo, ele funciona bem. Estou esquecendo de algo?

main()
{
    int *p;
    p=malloc(sizeof(int));
    printf("size of p=%d\n",sizeof(p));
    p[500]=999999;
    printf("p[0]=%d",p[500]);
    return 0;
}

Eu tentei com malloc (0 * sizeof (int)) ou qualquer coisa, mas funciona muito bem. O programa falha apenas quando eu não uso o malloc. Portanto, mesmo se eu alocar 0 de memória para a matriz p, ele ainda armazenará os valores corretamente. Então, por que estou me incomodando com malloc então?

questionAnswers(7)

yourAnswerToTheQuestion