Насколько большим может стать строковый класс в C ++? - PullRequest
0 голосов
/ 21 ноября 2011

Я думаю, что ошибка связана с моей слишком большой строкой. Если функция работала правильно, я сомневаюсь, что я был бы где-то рядом с максимальным размером строки (разве это действительно является проблемой? Я сомневаюсь в этом, потому что это для назначения HW, и нам нужно вернуть output с текстом песни). Что выдает эту ошибку? Насколько большой может быть строка?

Ошибка:

terminate called after throwing an instance of 'std::length_error'  
what():  basic_string::_S_create 
Aborted (core dumped)

Функция:

string generateSong(string list[], int num)
{
   string output;

   for(int count = 0; count <= num; count++)
      output += list[count] + " bone connected to the "
      + list[count + 1] + " bone\n";

   return output;
}

Содержимое list[]:

string list[9] =
   {
      "toe",
      "foot",
      "leg",
      "knee",
      "hip",
      "back",
      "neck",
      "jaw",
      "head"
   };

num равно 9. Действительно ли output становится слишком большим? Все компилируется нормально (с использованием g ++).

Ответы [ 3 ]

4 голосов
/ 21 ноября 2011

Фактическая проблема с вашим кодом здесь:

for(int count = 0; count <= num; count++)
                     //  ^^^ problem!

Это должно быть count < (num-1), потому что вы используете list[count + 1] в теле цикла.

3 голосов
/ 21 ноября 2011

Когда вы получаете доступ к list[count + 1], вы можете перебирать только от 0 до num - 1.

0 голосов
/ 21 ноября 2011

Максимальный размер std::string определяется моей функцией max_size().

Попробуйте:

std::string s;
std::cout << s.max_size();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...