2016-11-21 111 views
-1

我還是新的C++指針,並會感到巨大的,如果有人可以幫助我走出這種局面在這裏:去分配對象的二維數組

while(true) 
{ 

//some input 

//if input is QUIT it quits the program 

// some code to calculate how many House objects we need 

House** houses = new House *[numOfHouses]; 


//some more code 


} 

是否有人可以指導我如何去分配房子(二維陣列)在這種情況下?

如果我的循環運行一次,並且用戶在第二次迭代中輸入QUIT,valgrind檢查會丟失8個字節。

如果我的循環運行兩次,並且用戶在第三次曝氣中輸入QUIT,我會在valgrind檢查中丟失16個字節。

感謝

+1

由於您覆蓋舊指針值:'House ** houses = new House * [numOfHouses];',因此您在該循環的每次迭代中都無法訪問分配的內存。 –

+0

是的..我可以弄清楚那麼多..所以你會建議什麼? –

+1

我建議使用'std :: vector houses(numOfHouses);'或者如果您確定需要指向'House'的指針,請使用'std :: vector >'(' '分別爲std :: shared_ptr ')。 –

回答

-4

delete houses將呼籲衆議院類的析構函數和數組中刪除一切

+0

存在對數組的特殊刪除,'delete []' – Creris

+0

如果他沒有正確實施析構函數 – Makaronodentro

+0

@Makaronodentro爲true,則不會。我希望他出於某種原因有一個。 –

1

既然你通過new通過

在堆上分配的數組重新分配它的正確方式
House** houses = new House *[numOfHouses]; 
// Cleanup 
delete[] houses; 

無論如何,因爲你在每次循環迭代時都用新的分配覆蓋指針,你會得到內存泄漏。

在循環內完成或使用智能指針後,釋放您的內存。