c++ vector of pairs of pointers 搞砸了

标签 c++ pointers vector reference

所以我在 C++ 中有一个指针对的 vector :

vector<pair<Move *,Piece *> > moveList;

其中 Move 是一个对象,Piece 是一个对象... Piece 有类变量 type 和 side

所以我向 moveList 添加内容:

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


    moveList.push_back(pr);

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

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

我也是

Move * j = moveList.back().first;

Piece 应该将其“类型”变量的值设置为“X”

但是当我调试时,结果是在上一行之后,出于某种原因,Piece 的“type”变量的值被设置为一些疯狂的数字,例如 -56 '\310'.....

我做错了什么?

编辑

moveList 也被设置为一个类变量

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

最佳答案

正如其他人所指出的,您似乎持有指向堆栈中对象的指针。一旦您退出函数/ block ,这些对象将超出范围。由于 STL 容器在内部管理它们的内存,因此一种方法可能是更改 vector 以直接保存对象而不是指针。

vector <pair <Move, Piece> > moveList;
// To insert
moveList.push_back (make_pair <Move, Pair> (move, pair));

当 moveList 对象超出范围时,它会自动释放与对象关联的内存。在指针的情况下,您必须记住手动释放内存,否则会发生内存泄漏。

关于c++ vector of pairs of pointers 搞砸了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5773660/

相关文章:

c++ - 在另一个类中使用自定义构造函数声明一个类

c# - 特定文件类型的文件系统过滤器驱动程序

c++ - RHEL6 上的自定义 GCC 4.8.2 使用 std::shared_ptr 给出构建错误

c++ - 增加音频设备的输出增益

C++ 带有自定义删除器错误的唯一指针

c - 如何将 char *a[] 转换为 char **?

c++ - 如何在 C++ 中存储对 STL 容器元素的指针/迭代器引用?

c++ - vector map - 怎么做

java - 使用 Java2D 和 Swing 为我的 Java vector 图形编辑器创建曲线工具

c++ - vector 中存储的对象,它们何时被销毁?