0

我是一个由三名中等能力程序员组成的团队的一员,我们目前正在尝试用 C++ 编写一个程序来体现我们的新加密算法。但是,我们遇到了一个错误,表明我们在某些时候超过了字符串的长度。我自己试过调试这个,但我没有运气。它在 jumble() 函数中,虽然......

无论如何,这里有一个临时 main() 函数的源代码粘贴:http: //pastebin.com/GvvYAsKg

它编译得很好,但是在运行时,我们得到以下错误:

在抛出 'std::out_of_range' 的实例后调用终止
what(): basic_string::substr Aborted

4

2 回答 2

7

您的问题之一是在这一行:

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

这将意味着您尝试访问inPT[inPT.length]超出字符串末尾的一个字符。你要

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

或者可能使用更惯用的 C++ 构造,std::for_each这样你就不能犯这种栅栏错误。如评论中所述,在调试器中运行它会很快向您指出这一点。

于 2013-05-03T18:47:38.410 回答
7

大概是这段代码

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

旨在阅读

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

您对超出范围访问的警卫inKey使用了错误的变量。

于 2013-05-03T18:48:26.060 回答