l1 es un puntero a un objeto de tipo
Lista<char>... dónde creas el objeto?? en ningún sitio. Al no crear el objeto, el puntero (que tampoco está inicializado), "apunta" a una dirección de memoria no válida, por lo que al intentar realizar la operación "l1->Insertar(cad[i])" el programa va a dar error.
Para solucionar este problema tienes dos opciones:
1. Quitas el asterisco, usas el objeto por valor, lo cual implica que se creará y se destruirá automáticamente. Por supuesto, al usar el objeto por valor, ya no puedes usar el operador '->'.
2. Usas un
new por algún lado para inicializar el objeto... y luego, por supuesto, te faltaría el correspondiente
delete para liberar la memoria reservada.
Un saludo.