方法由于c ++中的分段错误而导致应用崩溃

时间:2020-03-24 07:53:45

标签: c++ vector while-loop crash segmentation-fault

此简单的循环方法无法运行,并且出现错误“应用程序崩溃” 。当我在在线编译器中检查此错误时,它发出了“分段错误(内核已转储)” -

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 :(得分:0)

是的。

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

应该是

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

有效向量索引为零,直到向量的大小减去一。这很明显,如果有效索引从零开始并达到向量的大小,那么有效索引将比向量的大小多一个,这是没有意义的。

通常,对于此类任务,您使用for循环

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

那样读起来会容易一些。