Cita: Obviamente que ese codigo no tiene mucho sentido, o usas memoria dinamica o estatica pero tal como esta hecho p es una variable de tipo puntero a char totalmente independiente de cadena. Primero le es asignado el valor de cadena y despues el que devuelva malloc, no estas reservando NADA sobre memoria ya reservada ya que no esta asignandole ningun valor a *p sino a p.
Tienes razon... No me habia fijado.
Gracias por la aclaracion
Saludos