尝试使用以下函数在C ++中动态实现数组。
我不确定是否需要删除newArray,但现在它会给出一个memleak。
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;
}
}
似乎会造成内存泄漏
答案 0 :(得分:1)
arrayCapacity *= 2;
}
Element* newArray = new Element[arrayCapacity*2];
这会导致您的阵列比arrayCapacity
大得多,这可能会导致其他地方出现问题。
应该只是
Element* newArray = new Element[arrayCapacity];
P.S。如果这不会导致 问题,请告诉我并将其作为评论,但这仍然是一个需要修复的错误
答案 1 :(得分:0)
您分配2x元素:
Element* newArray = new Element[arrayCapacity*2]; // Make a new array
我认为,需要:
Element* newArray = new Element[arrayCapacity]; // Make a new array