c++ - 由于 C++ 中的段错误而导致应用程序崩溃的方法

标签 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(); }
};
我是在脱离键访问元素吗?但我不知道在哪里,因为我在编程中每个数字都从 0 开始

最佳答案

是的,你是。

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

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

有效 vector 索引为零,直到 vector 的大小减一。这应该很明显,如果有效索引从零开始并达到 vector 的大小,那么有效索引就会比 vector 的大小多一个,这是没有意义的。

通常,您对此类任务使用 for 循环
for (int i = 0; i < ch.a.quantity(); i++) {
    a += ch.a.getAns(i);
}

以这种方式阅读会更容易一些。

关于c++ - 由于 C++ 中的段错误而导致应用程序崩溃的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60826889/

相关文章:

c++ - 如何使用迭代器在 C++ 中的递归函数中传递值?

C++,需要帮助理解使用指针的 vector 类中的一些构造函数和函数

python - 将四元数旋转应用于向量时间序列

php - 获取某个主题中的帖子数量 PHP

c++ - 如何在 OpenGL 中使用 alpha 透明度?

c++ - 在 Win32 中构建最新的 iconv 和 libxml2 二进制文件

c - 再次打印对函数的最后一次调用

python - while循环运行一次?

C++ 到 Ada 的指针和异常

c++ - 尽管更改了字符串,但我的字符串返回了某个数字