Есть часть кода, требуется написать функцию. Функцию я написал, вот только компилятор ругается, никак не могу понять, что не так.
ЗадачаВам нужно написать функцию int* my_slightly_dumb_reallocation(int* source, unsigned int n_old, unsigned int n_new) , которая меняет размер памяти, выделенной под массив целых чисел. Она должна выделить новый кусок памяти нужного размера, перенести туда данные из старого массива, очистить память по старому адресу и вернуть указатель на этот массив.
В качестве аргументов она принимает:
Указатель на массив, память для которого была выделена в куче (heap) при помощи оператора new[]. Обратите внимание, что если вам передали некорректный указатель ( NULL ), функция должна это проверять и не пытаться этот указатель разыменовывать или очищать память по этому адресу.
Количество элементов массива на момент вызова функции.
Новое количество элементов. Если оно меньше, чем старое, то вы копируете только те элементы, которые влезают, и ничего не выводите на экран. Часть данных потеряется, но это на совести того, кто вашу функцию вызывал. В реальной жизни в таком случае хорошо бы печатать предупреждение, но в формат контеста это не лезет.
Для проверки будет использоваться следующий код. Вы можете использовать его для отладки.
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
int* my_slightly_dumb_reallocation(int* source, unsigned int n_old, unsigned int n_new);
int main() {
unsigned int n, i;
cin >> n;
int *a = my_slightly_dumb_reallocation(NULL, 0, n / 2);
for (i = 0; i < n / 2; i++)
cin >> a[i];
a = my_slightly_dumb_reallocation(a, n / 2, n);
for (; i < n; i++)
cin >> a[i];
int sum = 0;
for (i = 0; i < n; i++)
sum += a[i];
cout << sum << endl;
a = my_slightly_dumb_reallocation(a, n, n / 2);
a = my_slightly_dumb_reallocation(a, n / 2, 0);
a = my_slightly_dumb_reallocation(a, 0, 0);
return 0;
}
Моя функция:
int* my_slightly_dumb_reallocation(int* source, unsigned int n_old, unsigned int n_new) {
if (source == NULL) {
int* array = new int[n_new];
}
else {
int* array = new int[n_new];
for (int i = 0; i < n_old && i < n_new; i++) {
array[i] = source[i];
}
delete[] source;
source = nullptr;
}
return array;
}