2013-05-07 50 views
0

我有一個名爲Deck的動態分配數組,它由卡對象組成,卡對象有兩個值,即套件和數字。查找動態分配數組的元素數

我需要從我的甲板陣列,這是我聲明於是找到卡的數量:

deck = new Card[52]; 

我不知道如何確定在甲板元素的含量,如果我改變量卡組中的卡片。現在我有:

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

其中getNumber()是一個函數,該函數可以提取卡的數值。然而,當我運行程序時說:「該計劃已停止工作」

+0

它是''\ 0''(帶反斜槓)和**不**''/ 0''。 – 2013-05-07 00:51:03

+0

啊!謝謝。它現在有效。 – user2105982 2013-05-07 00:54:17

+0

這不是找到大小的問題;這是恢復你扔掉的信息的問題。答案是:不要扔掉它。如果您稍後需要尺寸,請將其記錄在某處。這就是'std :: vector'所做的。 – 2013-05-07 01:01:25

回答

2

這是不可能在C++或C你需要創建一個結構:

struct Deck { int nCards; Card *cards; } 

,或者更好的辦法是使用std::vector<Card> ,這已經爲你做了。如果你真的不想要的結構,以及由於某種原因不希望使用矢量分配一個虛擬卡指針,並將其設置爲null,以紀念數組的末尾:

deck = new Card[52+1]; 
deck[52] = 0; 
while (deck[i]) { /* ... */ } 
+0

我將代碼更改爲Pileborg所說的,現在它工作正常。 – user2105982 2013-05-07 00:53:53

0

你要麼必須將數字與數組分開存儲,像C字符串一樣使用標記值來指示數組的末尾,或者您可以使用C++編程並使用可以增大和縮小的矢量。

0

當你說程序顯示「程序停止工作」時,我不明白你的意思。我認爲這是某種自定義異常消息。

但是,我看到代碼中存在緩衝區溢出(數組索引超出界限異常)的可能性。如果數組中的所有52個插槽都被佔用,然後在第52次迭代中,大小變量的值轉向52,導致甲板陣列中的非法索引訪問(它已被預分配一組52個槽)。

此外,這當然不是一個動態分配的數組,因爲您正在初始化步驟設置其大小。