Проблема в том, что у вас есть доступ за пределами допустимого диапазона в строке final_key
здесь:
final_key[i] = ((string1[i]-'0') ^ (string2[i]-'0')) + '0';
Поскольку final_key
начинается как пустая строка, вам необходимо либо изменить ее размер перед доступом к i
-й записи, либо объединить ее с пустой строкой:
Так что это либо:
final_key.resize(15);
for (int i = 0; i < 15; ++i )
final_key[i] = ((string1[i]-'0') ^ (string2[i]-'0')) + '0';
или это:
for (int i = 0; i < 15; ++i )
final_key += ((string1[i]-'0') ^ (string2[i]-'0')) + '0';
или это:
for (int i = 0; i < 15; ++i )
final_key.push_back(((string1[i]-'0') ^ (string2[i]-'0')) + '0');
Примечание:
Чтобы показать, что вы выходите за пределы, в исходном коде (без исправления resize(15)
) замените это:
final_key[i] = ((string1[i]-'0') ^ (string2[i]-'0')) + '0';
с этим:
final_key.at(i) = ((string1[i]-'0') ^ (string2[i]-'0')) + '0';
Вы должны получить исключение std::out_of_range
, показывающее, что запись i
выходит за пределы.