Tienes una casa (Un fragmento de memoria), a la que le asignas una dirección conocida (El puntero y su dirección, ej "*puntero"), eso con Malloc, cuan grande sea la casa, depende de lo que necesites (o sea, de los parámetros de malloc), ahora procedes a habitar la casa, llenarla, ahí vas a el contenido (o sea "puntero"), luego no necesitas más, aplicas free, ya no necesitas las casa, la indicas como disponible, pero la casa continua ocupada!. Eso significa que si recurres a malloc nuevamente, es posible, que recurra a esa casa nuevamente (o dirección de memoria), sin importar si tiene gente viviendo, o sea cagaron las personas (o datos). Por eso, para no dejar la memoria cargada con cosas que no se ocuparan. Luego de aplicar free, asignale NULL.