se tu fai free(array); liberi la memoria puntata da array... ovvero la prima cella dell'array.. ma evidentemente la variabile array continua a puntare a quella memoria.. quindi se fai array+1 ti punterà al corretto elemento.. ma questo non vuol dire che la memoria del primo elemento sia stata liberata..