查找动态分配的数组的元素数

时间:2013-05-07 00:48:32

标签: c++ arrays dynamic

我有一个名为Deck的动态分配数组,由Card对象组成,它有两个值,suit和number。

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

deck = new Card[52];

如果我改变牌组阵列中的牌数,我不知道如何确定牌组中的元素数量。现在我有:

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

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

3 个答案:

答案 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个插槽)。

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