从向量c ++中擦除对象时的分段错误

SNp*_*Npn 7 c++ segmentation-fault

所以当我运行这个函数时,我就是错误的

      class vector <Record<value> >::iterator itr = records.begin();

      for (; itr != records.end(); ++itr) {
        if (itr->isSelected()) {
          itr = records.erase(itr);
          recordSize--;
        }
      }
Run Code Online (Sandbox Code Playgroud)

我的向量所在的位置vector <Record <value> > records;,函数isSelected()只是在boolean选择对象时为true,否则为false.

有人可以帮助我,我没有看到这样做的问题

Gre*_*ill 6

在你删除最后一个元素的情况下,itr首先是records.end()因为那records.erase()将返回,然后你用它递增它++itr.尝试:

  while (itr != records.end()) {
    if (itr->isSelected()) {
      itr = records.erase(itr);
      recordSize--;
    } else {
      ++itr;
    }
  }
Run Code Online (Sandbox Code Playgroud)