两个不同的指针数组,但是它们都指向相同的地址

时间:2019-01-28 02:12:49

标签: c++ c++11

我正在制作二十一点游戏,并且我有一个用于经销商和玩家手的指针阵列。问题是,当我随机生成要存储在阵列中的卡时,它们都具有相同的卡。不知道是否是因为它们都指向相同的地址或我没有注意到的东西。

foo.compareTo(bigDecimal);

发牌人卡应该与玩家卡中的人不同,但是在运行程序时它们是相同的。

1 个答案:

答案 0 :(得分:-2)

显示代码声明一个具有两个成员的类,如下所示:

int *dhand[];
int *phand[];

这是类的两个成员,但这不是有效的标准C ++。可变长度数组不是标准的C ++。

因此,此代码中的整个逻辑变为未指定的行为。您观察到的行为是两个数组看起来是相同的。对。这就是未指定行为的含义,这似乎是特定C ++编译器和实现所导致的行为。您的C ++编译器似乎是通过创建一个类成员来实现此目的的,该成员的大小总计为0个字节(毕竟,未指定数组的大小,因此是“零”),并期望这将是最后一个类成员,应用程序将负责分配此对象实例所需的内存以外的一些额外内存,以这种方式实现伪数组。

但是,这样有两个类成员声明,​​最终以两个实际上是相同的类成员结束。您观察到的是哪种行为。由于程序相对于C ++标准格式不正确,因此其他C ++编译器很可能会报告编译错误。

要解决此问题,您应该使用适当的数组替换这些类成员。仔细阅读显示的代码,看起来您期望这些数组本质上是可变大小的数组。这就是std::vector的目的,并且您的C ++书中应该包含一个或多个章节,以充分说明如何使用std::vector来实现类似数组的对象,该对象可以相应地增大和缩小。< / p>

相关问题