C ++:双重免费或腐败(外出)

时间:2015-12-24 13:39:55

标签: c++ memory segmentation-fault

我收到此错误

*** Error in `./main': double free or corruption (out): 0x000000000095c8a0 ***
  • getPieces()定义为vector<Piece*> Position::getPieces()
  • getSymbol()会返回int

我想要实现的是从向量中移除与变量Piece相同的Pointer* piece指针。

int Position::removePiece(Piece* piece) {
  for (size_t i = 0; i < getPieces().size(); i++) {
    if (getPieces()[i] == piece) {
      getPieces().erase(getPieces().begin() + i); // errors happens here
      std::cout << getPieces().size() << std::endl;
      return getSymbol();
    }
  }

  return -1;
}

1 个答案:

答案 0 :(得分:2)

如上所述,getPieces()会返回向量的副本。每次拨打getPieces()时,都会有不同的副本。您尝试使用迭代器从另一个向量中删除元素,难怪出现问题。无论如何,您尝试修改一个副本,当您离开该函数时(甚至更早),该副本将被销毁。

如果getPiecesPosition返回内部字段副本(例如m_vector)的方法,请在m_vector中使用removePiece()而不是{{1}调用。