No, sino que estás intentando acceder a un carácter de la cadena que no existe. Por ejemplo:
Código:
string cadena="ae";
int longitud=cadena.length(); // = 2
Tu código intententa acceder a cadena[longitud] al principio del bucle, es decir cadena[2], y este no existe porque el último carácter va a tener índice (longitud-1).
Código:
getline(cin, cadena, '\n');
lo puedes cambiar por
ya que getline() extrae una linea entera de todas formas.