Salve a tutti,non riesco a capire una cosa. Perchè se faccio

unisgned char * metric;
metric= (unsigned char *)malloc(4);
os<<"\n"<<metric[100];

non mi da errore??

E anche facendo:

free(metric)
os<<"\n"<<metric[100];

Non mi da errore?

Mi sapreste dire se c'è un modo per risalire alla dimensione del puntatore? cioè se faccio

metric= (char *)malloc(10);

vorrei risalire al fatto che metric occupa 10 byte ma come faccio ? ( sizeof(metric) restituisce la grandezza dell'indirizzo di memoria e sizeof(*metric) restituisce la dimensione di unsigned char cioè 1 giusto?)