【问题标题】:method giving app crashes due to segmentation fault in c++由于 C++ 中的分段错误而导致应用程序崩溃的方法
【发布时间】:2020-07-04 16:52:22
【问题描述】:

这个简单的循环方法无法运行,出现错误“app crashed”。当我在在线编译器中检查它时,它给出了 'segmentation fault(core dumped)'-

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开始的位置

【问题讨论】:

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


    【解决方案1】:

    是的。

    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);
    }
    

    这样阅读会更容易一些。

    【讨论】:

    • 谢谢,但是调用这个方法还是有app崩溃的。在打印 a 的值时,“仔细听”被打印出来,但之后应用程序崩溃了。请帮助我。提前谢谢!
    • @hemantkumar 上面的函数不打印任何东西。所以你的崩溃可能是不同的功能。是什么让你认为它在这个函数中?
    • 但是上面的函数返回的是a的值,而且起首行是“仔细听”。我用cout打印了一个简单的
    • @hemantkumar 对不起,我怎么知道你之前没有提到的代码。在任何情况下,崩溃可能仍然在此函数返回之后。如果我理解正确,那么这个函数不会导致崩溃,因为您已经修复了&lt;= 问题。但由于我看不到你的最新代码,我可能是错的。
    猜你喜欢
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多