2016-02-04 143 views
1

我想爲我正在採用的類做一個Phonehandler系統,該任務指定我們使用指針指向Phonehandler類中的Phone對象的指針,用於存儲電話的陣列從一開始就有兩個電話的大小,並且可以稍後進行擴展。 (?)我的相關代碼如下:Memoryleak指針指針,C++

PhoneHandler.h

Phone **phones; 

PhoneHandler.cpp(構造函數)

PhoneHandler::PhoneHandler() 
{ 
this->phones = new Phone*; 
*phones = new Phone[2]; 
} 

我的代碼包含了一些比這更多的東西,但我沒有在任何其他地方寫「新」,所以memoryleaks被分配在構造函數中。我做了一個析構函數如下:

PhoneHandler.cpp(析構函數)

PhoneHandler::~PhoneHandler() 
{ 
delete[] phones; 
delete phones 
} 

但它崩潰在析構函數中的第一行。所以我需要幫助以太構造函數或析構函數,也許兩者。如果有必要,隨意問我更多的代碼,但我認爲這個問題是在這個代碼中的某個地方。謝謝

+4

'delete [] * phones;'與構造函數一致。 – Jarod42

+0

順便說一句,不要忘記5/3/0的規則。 (拷貝/移動/分配)。 – Jarod42

+2

不要試圖成爲[三星程序員](http://c2.com/cgi/wiki?ThreeStarProgrammer)。額外的間接性是無用的和傷害的(正如你所見),而動態分配的數組只是不好的做法。有'std :: vector'。 – LogicStuff

回答

0

delete [] phomes不會導致任何崩潰。

delete phomes正在導致崩潰。

+0

如果我只有delete []手機,它會給我「檢測到的堆損壞」,而不是我的錯誤消息,但我仍然有內存泄漏 – Adam

+1

delete [] phones'是UB因爲'phones'由'新'而不是'新[]' – Jarod42