el tema es, las string son en realidad un numero entero representa el indice dentro de una tabla de strings, y donde ademas hay un contador de usos... y cuando este contador de usos es 0, la string se libera (es un garbage collector), en el caso de los punteros, el motor no puede saber si *puntero_a_string, esta apuntando a una string o todavia no fue asignado a nada, entonces el motor no actualiza el contador de usos ahi...
cuando tu haces un &var_string, lo que haces es apuntar a la direccion de la variable que contiene el id (indice) de la string real, esta direccion no cambia nunca... y esta apuntando realmente a una string real, con un espacio previamente reservado por el motor y con un contador de usos controlado.
ahora cuando tu pasas libremente punteros a string, estos inicialmente no apuntan a un area estatica, apuntan a lo que aloques, a menos que tu puntero sea un puntero a una variable ya declarada como string... pero como sea, el motor no controla el contador de usos con punteros, porque no sabe que realmente esta usado y que no... por ende, puede ocurrir que cuando tu puntero quiera acceder a la string, el puntero realmente este apuntando a una string que ya no existe, puesto que se elimino por el contador de usos.
por eso, a menos que sepas que estas haciendo, no es recomendable usar punteros a string.
es dificil de explicar, asi que puede que tambien sea dificil de entender...