此简单的循环方法无法运行,并且出现错误“应用程序崩溃” 。当我在在线编译器中检查此错误时,它发出了“分段错误(内核已转储)” -
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(); }
};
我正在尝试访问超出范围的向量索引
答案 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);
}
那样读起来会容易一些。