我收到此错误
*** 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;
}
答案 0 :(得分:2)
如上所述,getPieces()
会返回向量的副本。每次拨打getPieces()
时,都会有不同的副本。您尝试使用迭代器从另一个向量中删除元素,难怪出现问题。无论如何,您尝试修改一个副本,当您离开该函数时(甚至更早),该副本将被销毁。
如果getPieces
是Position
返回内部字段副本(例如m_vector
)的方法,请在m_vector
中使用removePiece()
而不是{{1}调用。