метод, дающий сбой приложения из-за ошибки сегментации в c ++ - PullRequest
0 голосов
/ 24 марта 2020

этот простой метод l oop не может быть запущен, и возникает ошибка «приложение упало» . когда я проверил это в онлайн-компиляторе, он выдал 'ошибка сегментации (ядро сброшено)' -

string studies(setMatter ch) {
  string a = "LISTEN CAREFULLY!\n";
  int i = 0;
  while (i <= ch.a.quantity()) {
    a += ch.a.getAns(i);
    i++;
  }
  return a;
}

, также см. ссылку на методы в приведенном выше коде -

class Answer {
 private:
  vector<string> ch;

 public:
  void setAns(string ans) { ch.push_back(ans); }

  string getAns(int num) { return (ch[num]); }

  int quantity() { return ch.size(); }
};

я пытаюсь получить доступ к векторному индексу, который выходит за пределы

1 Ответ

0 голосов
/ 24 марта 2020

Да, вы.

while(i<=ch.a.quantity()){

должно быть

while(i<ch.a.quantity()){

Допустимые векторные индексы равны нулю вплоть до размера вектора минус один. Это должно быть очевидно, если действительные индексы начинаются с нуля и доходят до размера вектора, тогда будет более действительный индекс, чем размер вектора, что не имеет смысла.

Обычно вы используете для l oop для такого рода задач

for (int i = 0; i < ch.a.quantity(); i++) {
    a += ch.a.getAns(i);
}

Это немного легче читать таким образом.

...