Я пытаюсь создать динамически выделенный массив, который при заполнении создает новый массив, достаточно большой для хранения всего и копирует все значения из старого массива в новый массив. Я выполняю функцию append, которая при вызове динамически выделяет новый массив с tmp, указывающим на него, а затем перемещает значения из arr [i] в tmp [i]. Тем не менее, мне интересно, нужно ли мне удалять tmp, когда я закончил с ним? Потому что, когда я пытаюсь распечатать содержимое массива без удаления tmp, он печатает просто отлично, но когда я удаляю tmp, вещи просто начинают становиться странными, а содержимое больше не печатается так, как должно. Вот мой код:Создание динамически выделенного массива
ArrayList::ArrayList(int initsize): last(0), size(initsize), origsize(initsize)
{
arr = new int[size];
}
ArrayList::ArrayList()
{
last = 0;
size = 16;
origsize = 16;
arr = new int[size];
}
void ArrayList::append(int value)
{
if (last<size) {
arr[last] = value;
}
last++;
if (last == size) {
int* tmp = new int[size+origsize];
int i = 0;
for (i=0; i<(size+origsize); i++)
tmp[i] = arr[i];
size = size+origsize;
arr = tmp;
arr[last] = value;
//delete tmp;
}
}
Просто убедитесь, что вы удалили в нужном месте. Ваш комментарий удаляет 'tmp', но я думаю, вы должны удалить' arr' прямо перед строкой 'arr = tmp'. – Sjlver
... Я предполагаю, что это академический подход и поэтому бросает всю вещь в пользу «std :: vector», о чем не может быть и речи. –
WhozCraig