0

目前我的代码存在一些重大问题,我希望有人能对此有所了解。

在我制作的代码中;玩家=新玩家*[2];连同玩家[i] = new Player(); 在一个for循环中。并赋予他们真正的价值。

稍后在我的代码中,我想这样做:

players[0] = players[1];
delete players[1];

调试时。玩家[0] 获取玩家[1] 的值。但是下一行球员[0]得到; string name = < Bad Ptr > 以及一些变为 -17912312 的 int 值。

我的第一个想法是我需要在 Player 中创建一个 operator= så。我建立:

Player& operator=(const Player& right);

Player& Player::operator=(const Player& right)
{
this->name=right.name;
this->coins=right.coins;
this->bet=right.bet;
return *this;
}

这没有效果。它甚至没有进入功能。为什么我不能分配值?

4

2 回答 2

0

在显示的代码players[0] = players[1];中将泄漏最初由players[0]. 在下一个语句中,您在两个插槽中都拥有一个指针后面的对象。如果您不立即将其设置为 NULL,那么您将持有对任何东西都无用的悬空指针。

写 op= 与案例完全无关,你不应该这样做。

于 2013-06-11T18:44:53.713 回答
0

这是一个悬空指针问题。当你做任务时

players[0] = players[1];

在删除播放器[1] 之后,您实际上使两个内存位置都无法访问。你能更好地解释一下你的目标吗?就像已经说过的那样,您不能对指针执行 operator= 重载。为什么你首先需要移除玩家[1]?当您澄清时,将使用更新的建议进行编辑!

于 2013-06-11T18:48:11.823 回答