Używanie operatora [] przy zmiennej string z parametrem większym niż zwracanym przez fukcje length() dla tego stringa jest działaniem niezdefiniowanym , które powoduje takie błędy jakich doświadczasz.
W praktyce drobne przekroczenie rozmiaru nie powoduje błędu, błąd jest zwracany dopiero gdy program dostrzega, że sięgasz poza pamięć dla niego zaalokowaną.
Innymi słowy zanim odwołasz się do konkretnego znaku w zmiennej typu string, która jest elementem tablicy text2, za pomocą [], powinieneś użyć funkcji resize, aby zaalokować pamięć na dane, które tam chcesz zapisać. String sam z siebie tego nie zrobi.