Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 带指针指向指针的Memoryleak,C++;_C++_Memory Leaks_Pointer To Pointer - Fatal编程技术网

C++ 带指针指向指针的Memoryleak,C++;

C++ 带指针指向指针的Memoryleak,C++;,c++,memory-leaks,pointer-to-pointer,C++,Memory Leaks,Pointer To Pointer,我正在尝试为我正在使用的一个类创建一个Phonehandler系统,该任务指定我们在Phonehandler类中为Phone对象使用一个指向指针的指针,并且存储Phone的数组从一开始就有两个Phone的大小,并且可以在以后扩展。我的相关(?)代码如下: PhoneHandler.h PhoneHandler.cpp(构造函数) 我的代码包含了比这更多的东西,但是我没有在任何其他地方编写“new”,所以memoryLeak是在构造函数中分配的。我制作了一个析构函数,如下所示: PhoneHand

我正在尝试为我正在使用的一个类创建一个Phonehandler系统,该任务指定我们在Phonehandler类中为Phone对象使用一个指向指针的指针,并且存储Phone的数组从一开始就有两个Phone的大小,并且可以在以后扩展。我的相关(?)代码如下:

PhoneHandler.h

PhoneHandler.cpp(构造函数)

我的代码包含了比这更多的东西,但是我没有在任何其他地方编写“new”,所以memoryLeak是在构造函数中分配的。我制作了一个析构函数,如下所示:

PhoneHandler.cpp(析构函数)


但它在析构函数的第一行崩溃了。所以我需要关于构造函数或析构函数的帮助,也许两者都需要。如果有必要,请随时向我索取更多代码,但我认为问题出在这段代码中的某个地方。谢谢

删除[]phomes
不会导致任何崩溃


delete phomes
导致崩溃。

delete[]phomes
不会导致任何崩溃


delete phomes
导致崩溃。

delete[]*手机要与constructor.BTW保持一致,也不要忘记5/3/0规则。(复制/移动/分配)。不要试图成为一名教师。额外的间接性是无用和有害的(如您所见),而动态分配的数组只是一种糟糕的做法。有
std::vector
。你删除
手机两次。显然,您不会分配两次
电话。(因为
phones
的值不能从两个不同的分配呼叫返回。)如果我只有delete[]*电话,我会收到错误消息“\u BLOCK\u TYPE\u IS\u VALID(pHead->nBlockUse)”。但我仍然有记忆库
delete[]*手机要与constructor.BTW保持一致,也不要忘记5/3/0规则。(复制/移动/分配)。不要试图成为一名教师。额外的间接性是无用和有害的(如您所见),而动态分配的数组只是一种糟糕的做法。有
std::vector
。你删除
手机两次。显然,您不会分配两次
电话。(因为
phones
的值不能从两个不同的分配呼叫返回。)如果我只有delete[]*电话,我会收到错误消息“\u BLOCK\u TYPE\u IS\u VALID(pHead->nBlockUse)”。但是我仍然有memoryleaks如果我只有delete[]手机,它会给我“检测到堆损坏”作为错误消息,但是我仍然有memoryleaks
delete[]手机
是UB,因为
phones
是由
new
分配的,而不是
new[]
如果我只有delete[]手机,它会给我“检测到堆损坏”改为作为错误消息,但我仍然有内存aks
delete[]phones
是UB,因为
phones
是由
new
分配的,而不是
new[]
Phone **phones;
PhoneHandler::PhoneHandler()
{
this->phones = new Phone*;
*phones = new Phone[2];
}
PhoneHandler::~PhoneHandler()
{
delete[] phones;
delete phones
}