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()是在该类中的不同方法上完成的
正如其他人所指出的,似乎你可能正在持有指向堆栈上对象的指针.退出功能/块后,这些对象将超出范围.由于STL容器在内部管理它们的内存,一种方法可能是更改向量以直接保存对象而不是指针.
vector <pair <Move, Piece> > moveList;
// To insert
moveList.push_back (make_pair <Move, Pair> (move, pair));
Run Code Online (Sandbox Code Playgroud)
当moveList对象超出范围时,它将自动释放与对象关联的内存.对于指针,您必须记住手动释放内存,否则会出现内存泄漏.