2016-02-04 132 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