在数组的动态分配内存上实现push_会导致内存泄漏 尝试用C++实现C++中的数组,具有以下函数:
我不确定是否需要删除新数组,但现在它给出了一个memleak在数组的动态分配内存上实现push_会导致内存泄漏 尝试用C++实现C++中的数组,具有以下函数:,c++,C++,我不确定是否需要删除新数组,但现在它给出了一个memleak void DynamicArray::push_back(Element e) { if (arraySize == arrayCapacity) // Resizing is necessary { // Update private variables if (arrayCapacity == 0) { arrayCapacity +=
void DynamicArray::push_back(Element e)
{
if (arraySize == arrayCapacity) // Resizing is necessary
{
// Update private variables
if (arrayCapacity == 0)
{
arrayCapacity += 2;
}
else
{
arrayCapacity *= 2;
}
Element* newArray = new Element[arrayCapacity]; // Make a new array
for (int i = 0; i < arraySize; i++)
{
newArray[i] = dynamicArray[i]; // Copy over old data
}
delete [] dynamicArray; // Remove the old array (prevent memory leak)
dynamicArray = nullptr;
dynamicArray = newArray;
newArray = nullptr;
delete [] newArray;
}
if (arraySize < arrayCapacity) // No resizing needed
{
dynamicArray[arraySize] = e; // With x items are in the array, the new item has an index of x
arraySize += 1;
}
}
void DynamicArray::推回(元素e)
{
if(arraySize==arrayCapacity)//需要调整大小
{
//更新私有变量
if(阵列容量==0)
{
阵列容量+=2;
}
其他的
{
阵列容量*=2;
}
Element*newArray=newelement[arrayCapacity];//创建一个新数组
for(int i=0;i
似乎是内存泄漏
arrayCapacity *= 2;
}
Element* newArray = new Element[arrayCapacity*2];
这会导致阵列比arrayCapacity
大得多,这可能会在其他地方引起问题
应该是
Element* newArray = new Element[arrayCapacity];
p、 如果这不是导致问题的原因,请告诉我,我会对此发表评论,但这是一个需要修复的bug,尽管如此您分配了2个元素:
Element* newArray = new Element[arrayCapacity*2]; // Make a new array
我认为,需要:
Element* newArray = new Element[arrayCapacity]; // Make a new array
.看起来不错。。你怎么知道是内存泄漏?实施三民主义?(或者现在是五法则?)析构函数、赋值运算符和复制运算符?有没有理由不使用已经是动态数组的
std::vector
。@Lebeau:是的,我知道std::vector。你能给我们看一下DynamicArray
的析构函数、复制构造函数和赋值运算符吗?很可能是其中一个导致了问题,但是您的泄漏检查工具正在报告分配发生的问题。