С cppreference std :: basic_string :: operator [] :
No bounds checking is performed. If pos > size(), the behavior is undefined.
С cppreference std :: basic_string construcor :
1) Default constructor. Constructs empty string (zero size and unspecified capacity).
Итак:
string newPassChar;
создает новую строку с size() == 0
.
Тогда:
newPassChar[0] = ...
перезапишет нулевой символ в строке.Но на следующей итерации, когда index = 1
, тогда:
newPassChar[1] = ....
это неопределенное поведение .и порождает демонов.
Я думаю, что вы хотите "push_back" символы, когда вы читаете их:
newPassChar.push_back(alpha[k]);
Нет необходимости хранить другую переменную "index", используемую для индексации строки,сам строковый объект знает свой размер, он доступен в методе size()
.