Ниже приведен фрагмент моего кода для структуры данных стека, которую я пытаюсь реализовать.Удаление массивов или освобождение памяти, ошибка C++
По какой-то причине, когда я удалю currentArray
, newArray
удаляется тоже, потому что ниже код дает мне во время выполнения ошибка, при которой содержимое newArray
и currentArray
являются значения мусора.
Я не уверен, почему это происходит.
Был бы очень признателен за то, почему я получаю эту ошибку, и если моя реализация push()
приведена ниже с фундаментальной точки зрения.
// Destructor
~Stack()
{
if ((size > 0) && (currentArray) != NULL && (newArray != NULL))
{
delete[] currentArray;
delete[] newArray;
}
}
inline void push(T value)
{
if (isEmpty())
{
// Stack size is increased by 1
size++;
currentArray = new T[size];
currentArray[size - 1] = value;
}
else
{
// Stack size is increased by 1
size++;
// Create the new array
newArray = new T[size];
// Copy the contents of the old array into the new array
copy(currentArray, currentArray + size, newArray);
// Push the new value on to the new array
newArray[size - 1] = value;
// Copy the new array into the current
currentArray = new T[size];
currentArray = newArray;
}
}
Во-первых, отправьте полную, но небольшую программу, которая демонстрирует ошибку. Во-вторых, ваш деструктор для 'Stack' выглядит странно - зачем вам все эти условия« удалять [] 'память? Просто 'delete []' он без всех этих условий. – PaulMcKenzie
Кроме того, где 'delete []' в вашей 'push' функции, чтобы избавиться от старой памяти? Если 'currentArray' уже был выделен, вы создали утечку памяти. Вот почему мы должны видеть все, а не фрагмент. Уверен, что ваши проблемы с этим классом начинаются гораздо раньше и в коде, который вы нам не показываете. – PaulMcKenzie
Примечание по оптимизации. Увеличивая размер стека, не просто увеличивайте размер на единицу, потому что время, затрачиваемое на копирование стека при каждом добавлении, убьет вашу производительность. Увеличьте размер на некоторое разумное число. Возможно, даже удвоить размер. – user4581301