std :: out_of_range错误?

时间:2010-05-27 03:24:26

标签: c++ string linked-list outofrangeexception

我正在处理一个带有链接列表的文件,每个节点看起来像这样:

struct TextLine{
    //The actual text
    string text;
    //The line number of the document
    int line_num;
    //A pointer to the next line
    TextLine * next;
};

我正在编写一个函数,通过调用像text

这样的函数,在变量linelist_ptr->text.insert(0,1,'\t');中找到的行的开头添加空格

程序编译,但是当我运行它时我得到了这个错误:

terminate called after throwing an instance of 'std::out_of_range'
  what():  basic_string::at
Aborted

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

您在代码中的某处使用了std :: string :: at(),但是您传递的是不正确的索引,因此它会抛出。由于你没有捕获任何异常,它会从main()传播出来并调用terminate(),从而终止进程。

你所展示的代码不会以这种方式失败,因为std :: string :: insert()不会调用std :: string :: at(),也不会调用参数。请在代码中添加异常处理,如果仍然找不到错误,请将代码的大部分(或整个文件)发布到http://codepad.org,最好是。)

答案 1 :(得分:1)

我认为你所描述的最可能的问题是调用insert()时,字符串末尾的位置无效(即> size())。你说这个例子是喜欢你正在调用的函数,所以检查一下你可能写的那些你可能传递位置的方法与上面的示例代码不同,并确保该值符合你的预期。

终止消息是因为你没有处理out_of_range异常(通过try / catch块),所以它逃脱了C ++语言运行时,它会毫不客气地关闭你的程序。

答案 2 :(得分:0)

检查linelist_ptr是否具有合法值,即您newdelete之前(并且在您使用之前尚未{{1}})