我是三个中等程度的程序员团队的一员,我们目前正在尝试用C ++编写一个程序来体现我们的新加密算法。但是,我们遇到了一个错误,表明我们在某个时刻超过了字符串的长度。我自己试过调试这个,但我没有运气。它在jumble()函数中,但是......
无论如何,这里是一个带有临时main()函数的源代码粘贴: http://pastebin.com/GvvYAsKg
它编译得很好,但在运行时,我们收到以下错误:
在抛出'std :: out_of_range'实例后终止调用 what():basic_string :: substr 中止
答案 0 :(得分:7)
你的一个问题就在于这一行:
for(int i = 0; i < ( inPT.length() + 1 ); i++)
这意味着您将尝试访问inPT[inPT.length]
,这是字符串末尾之外的一个字符。你想要
for(int i = 0; i < inPT.length(); i++)
或者可能使用更像std::for_each
这样的惯用C ++构造,这样就不会出现这种fencepost错误。正如评论中所指出的那样,在调试器中运行它会很快指出这一点。
答案 1 :(得分:7)
据推测这段代码
if(modCount >= inPT.length())
{
modCount = 0;
}
int mod = inKey.at(modCount);
意在阅读
if(modCount >= inKey.length())
{
modCount = 0;
}
int mod = inKey.at(modCount);
inKey
对超出范围访问的警惕使用了错误的变量。