C++:双倍免费或损坏(out)

C++ : Double free or corruption (out)

本文关键字:损坏 out 免费 C++      更新时间:2023-10-16

我收到这个错误

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

我想要实现的是从向量中移除与变量Pointer* piece相同的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;
}

写入时,getPieces()返回向量的副本。每次调用getPieces()时,都是不同的副本。您试图使用迭代器从一个向量中移除元素,这就难怪会出现问题。无论如何,您尝试修改一个副本,该副本将在您离开函数时(甚至更早)被销毁。

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