成对指针的c ++向量搞砸了

kam*_*lot 1 c++ pointers reference vector

所以我在c ++中有一对指针的向量:

vector<pair<Move *,Piece *> > moveList;
Run Code Online (Sandbox Code Playgroud)

其中Move是一个对象而Piece是一个对象...... Piece具有类变量类型和侧面

所以我向moveList添加东西:

    pair <Move *, Piece *> pr (&m,&(p));


    moveList.push_back(pr);
Run Code Online (Sandbox Code Playgroud)

其中m是Move对象,p是Piece对象

但每当我调用moveList.back()方法时,由于某种原因它会修改Piece的值

所以我这样做

Move * j = moveList.back().first;
Run Code Online (Sandbox Code Playgroud)

Piece应将其"type"变量的值设置为"X"

但是当我调试时,事实证明,在上面一行之后,由于某种原因,Piece的"类型"变量的值被设置为一些疯狂的数字,例如-56'\ 310'......

我究竟做错了什么?

编辑

moveList也被设置为类变量

并且推送到moveList和获取moveList的back()是在该类中的不同方法上完成的

AK.*_*AK. 5

正如其他人所指出的,似乎你可能正在持有指向堆栈上对象的指针.退出功能/块后,这些对象将超出范围.由于STL容器在内部管理它们的内存,一种方法可能是更改向量以直接保存对象而不是指针.

vector <pair <Move, Piece> > moveList;
// To insert
moveList.push_back (make_pair <Move, Pair> (move, pair));
Run Code Online (Sandbox Code Playgroud)

当moveList对象超出范围时,它将自动释放与对象关联的内存.对于指针,您必须记住手动释放内存,否则会出现内存泄漏.