-2

次の関数を使用して、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;
    }

}

メモリリークを与えるようです

4

2 に答える 2