std :: out_of_range在C ++中访问std :: string时出错

时间:2013-05-03 18:43:46

标签: c++ outofrangeexception

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

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

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

  

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

2 个答案:

答案 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对超出范围访问的警惕使用了错误的变量。