我不允許使用載體專門爲這個作業。我發現的大部分答案只是陳述「你應該使用矢量」作爲最受歡迎的評論。雖然我很欣賞並理解這一點,但我僅僅被限制使用它來完成這項任務。插入對象與動態存儲器陣列(無載體允許)C++
它是一個C++分配與動態存儲器管理如下:
// property in header declaration
int numAnimals;
int capacity;
Animal** animals;
void addAnimal(Animal *newAnimal);
// class implementation
capacity = 10;
numAnimals = 0;
animals = new Animal*[capacity];
void SampleClass::addAnimal(Animal *newAnimal)
{
for (int i = 0; i < capacity; i++){
if(animals[i]){
// animal object already exists in array, move on
i++;
}else{
animals[i] = newAnimal;
numAnimals++;
break;
}
}
}
動物是一個指針的指針,在此情況下的指針的指針數組到對象,它還有待型動物創建。
使用'addAnimal'函數,我試圖做的是通過循環指針數組來添加一個動物對象到數組,如果已經存在動物對象,則迭代到下一個索引。如果沒有動物,那麼將該動物插入數組中。
我得到拋出的異常「讀訪問衝突」,當我試圖訪問一個動物對象的成員函數在數組中。
我懷疑是因爲: 如果(動物[1])可能沒有做什麼,我認爲它在做什麼,通過我從來不打「其他」部分中的調試器來運行它,所以陣列仍然是滿的指針在方法完成時未設置爲任何對象。因此,當我嘗試訪問一個成員函數時,它是一個不存在的對象。
所以,如果我的懷疑是正確的,那麼什麼是插入一個新的對象爲指針,以這種方式數組的最佳方式?他們需要的是三分球,否則它會自動創建數組充分填充物,這是不是我想要的。
我沒有張貼所有的代碼,因爲我想繼續我的問題簡單地說,道歉,我是一個新的C++和一般的計算器。是的,我知道要刪除[]來清除內存。
任何幫助表示讚賞,謝謝!
你已經有了'numAnimals'。簡單地使用它:'動物[numAnimals] = newAnimal;'不要搜索。 – 2017-10-20 10:39:42
'if(animals [i])** **正在測試一個空指針,但是當你從'new'獲得內存時,不能保證指針是空的。無論如何,使用'numAnimals'似乎是一個更好的主意。 –
謝謝@ manni66,快速響應,當你提起它時非常明顯。 sp2danny的答案也是我所尋找的,但我同意你的提示適用於我的用例。 –