gpt4 book ai didi

c++ vector of pairs of pointers 搞砸了

转载 作者:行者123 更新时间:2023-11-30 00:40:35 25 4
gpt4 key购买 nike

所以我在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com