outofrangeexception — ошибка std :: out_of_range при доступе к std :: string в переполнении стека

Я являюсь частью команды из трех программистов со средними способностями, и в настоящее время мы пытаемся написать программу на C ++ для воплощения нашего нового алгоритма шифрования. Однако мы столкнулись с ошибкой, которая указывает на то, что в какой-то момент мы превышаем длину строки. Я сам пытался отладить это, но мне не повезло. Это в функции jumble (), хотя …

В любом случае, вот вставка нашего исходного кода с временной функцией main ():
http://pastebin.com/GvvYAsKg

Компилируется нормально, но при запуске мы получаем следующую ошибку:

прекращение вызова после выброса экземпляра ‘std :: out_of_range’
что (): basic_string :: substr
Отменено

0

Решение

Одна из ваших проблем в этой строке:

for(int i = 0; i < ( inPT.length() + 1 ); i++)

Это будет означать, что вы пытаетесь получить доступ inPT[inPT.length] который является одним символом за концом строки. Ты хочешь

for(int i = 0; i < inPT.length(); i++)

или, возможно, использовать более идиоматическую конструкцию C ++, такую ​​как std::for_each так что вы не можете сделать такую ​​ошибку. Как отмечалось в комментариях, запуск этого в отладчике довольно быстро показал бы это.

7

Другие решения

Предположительно этот кусок кода

if(modCount >= inPT.length())
{
modCount = 0;
}
int mod = inKey.at(modCount);

предназначен для чтения

if(modCount >= inKey.length())
{
modCount = 0;
}
int mod = inKey.at(modCount);

Ваш охранник вне доступа на inKey использует неправильную переменную.

7

По вопросам рекламы [email protected]