在为数组动态分配的内存上实现push_back会给出内存泄漏

implementing push_back on dynamically allocated memory for an array gives MEMORY LEAK

本文关键字:内存 back 泄漏 push 实现 数组 动态分配      更新时间:2023-10-16

尝试使用以下函数在C++中动态实现数组。

我不确定是否需要删除 newArray,但现在它给出了一个内存。

    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;
    }
}

似乎给出了内存泄漏

             arrayCapacity *= 2;
        }
        Element* newArray = new Element[arrayCapacity*2];

这会导致阵列比arrayCapacity大得多,这可能会导致其他位置出现问题。

它应该只是

 Element* newArray = new Element[arrayCapacity];

附言如果这不是导致问题的原因,请告诉我并对此发表评论,但这仍然是一个需要修复的错误

分配 2x 个元素:

Element* newArray = new Element[arrayCapacity*2]; // Make a new array

我假设,需要:

Element* newArray = new Element[arrayCapacity]; // Make a new array