Die Fehlermeldung ist doch eindeutig, oder?

Sie bedeutet einfach nur, dass du auf Speicherbereiche zugreifst, die vorher nicht reserviert wurden. Du erstellst einen nullterminierten string der Länge (length -1):
char* out = new char[length-1];
und greifst aber mit:
out[length] = 0;
auf das das Element length zu.
Ändere die Zeile:
char* out = new char[length-1];
wie folgt:
char* out = new char[length+1];
dann sollte das Programm arbeiten, vorausgesetzt, du hast Hans-Jürgen's Hinweis befolgt und "lchar = in[i]" durch "lchar = out[i]" ersetzt.
Steffen