Ошибка std :: out_of_range? - PullRequest
       14

Ошибка std :: out_of_range?

0 голосов
/ 27 мая 2010

Я имею дело с файлом со связанным списком строк, где каждый узел выглядит следующим образом:

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 ]

1 голос
/ 27 мая 2010

Вы используете std :: string :: at () где-то в своем коде, но передаете ему неверный индекс, следовательно, он выдает. Поскольку вы не перехватываете никаких исключений, оно распространяется из main () и вызывается terminate (), убивая процесс.

Код, который вы показали, не может завершиться таким образом, так как std :: string :: insert () не вызывает std :: string :: at (), как и параметры. Пожалуйста, добавьте обработку исключений к своему коду, и, если вы все еще не можете найти ошибку, пожалуйста, опубликуйте больший раздел вашего кода (или весь файл, желательно http://codepad.org).

1 голос
/ 27 мая 2010

Я думаю, что наиболее вероятная проблема из того, что вы описали, заключается в том, что insert () вызывается с недопустимой позицией в конце строки (т.е.> size ()). Вы говорите, что этот пример подобен функциям, которые вы вызываете, поэтому проверьте те, которые вы, возможно, написали, где вы, возможно, проходите позицию иначе, чем в приведенном выше примере кода, и убедитесь, что значение соответствует ожидаемому.

Сообщение о прекращении вызвано тем, что вы не обрабатываете исключение out_of_range (через блоки try / catch), поэтому оно выходит за пределы времени выполнения языка C ++, что бесцеремонно завершает работу вашей программы.

0 голосов
/ 27 мая 2010

Убедитесь, что linelist_ptr имеет допустимое значение, т. Е. Что вы new его редактировали (и до его использования не было delete d)

...