0

我有一个名为 Deck 的动态分配数组,由 Card 对象组成,这些对象有两个值,花色和数字。

我需要从我的牌组数组中找到牌的数量,我声明如下:

deck = new Card[52];

如果我更改卡片组数组中的卡片数量,我不确定如何确定卡片组中的元素数量。现在我有:

int size=0;
Card a;
while (a.getNumber() != '/0'){
    size++;
    a = deck[size];
}

其中 getNumber() 是一个拉取卡片数值的函数。但是,当我运行程序时说“程序已停止工作”

4

3 回答 3

2

这在 C++ 或 C 中是不可能的。您需要创建一个结构:

struct Deck { int nCards; Card *cards; }

或者,更好的方法是 use std::vector<Card>,它已经为你做到了。如果您真的不想要一个结构,并且由于某种原因不想使用向量,请分配一个虚拟 Card 指针并将其设置为 null 以标记数组的结尾:

deck = new Card[52+1];
deck[52] = 0;
while (deck[i]) { /* ... */ }
于 2013-05-07T00:51:00.460 回答
0

当您说程序说“程序已停止工作”时,我不明白您的意思。我认为这是某种自定义异常消息。

但是,我在您的代码中看到缓冲区溢出(数组索引超出范围异常)的可能性。如果数组中的所有 52 个插槽都被占用,然后在第 52 次迭代中,大小变量的值变为 52,导致甲板数组中的非法索引访问(已预先分配了一组 52 个插槽)。

此外,这肯定不是动态分配的数组,因为您在初始化步骤中正确设置了它的大小。

于 2013-05-07T00:59:53.663 回答
0

您要么必须将该数字与数组分开存储,执行类似 C 字符串的操作并使用标记值来指示数组的结尾,要么您可以实际使用 C++ 编程并使用可以增长和缩小的向量。

于 2013-05-07T00:52:32.180 回答