我有一个名为Deck的动态分配数组,由Card对象组成,它有两个值,suit和number。
我需要从我的牌组中找到牌数,我声明如此:
deck = new Card[52];
如果我改变牌组阵列中的牌数,我不知道如何确定牌组中的元素数量。现在我有:
int size=0;
Card a;
while (a.getNumber() != '/0'){
size++;
a = deck[size];
}
其中getNumber()是一个拉取卡片数值的函数。但是,当我运行该程序时,说“该程序已停止工作”
答案 0 :(得分:2)
这在C ++或C中是不可能的。您需要创建一个结构:
struct Deck { int nCards; Card *cards; }
或者,更好的方法是使用std::vector<Card>
,它已经为您做到了。如果你真的不想要一个结构,并且由于某种原因不想使用向量,请分配一个虚拟卡指针并将其设置为null以标记数组的结尾:
deck = new Card[52+1];
deck[52] = 0;
while (deck[i]) { /* ... */ }
答案 1 :(得分:0)
您可能必须将该数字与数组分开存储,执行类似C字符串的操作并使用sentinel值来指示数组的结尾,或者您实际上可以使用C ++编程并使用可以增长和缩小的向量
答案 2 :(得分:0)
当你说程序说“程序已停止工作”时,我不明白你的意思。我认为这是某种自定义异常消息。
但是,我发现代码中存在缓冲区溢出(数组索引超出边界异常)的可能性。如果数组中的所有52个插槽都被占用,那么在第52次迭代中,size变量的值将变为52,导致甲板阵列中的非法索引访问(它已预先分配了一组52个插槽)。
此外,这肯定不是动态分配的数组,因为您在初始化步骤中正确设置其大小。