Не могу найти ошибку в функции, все перепробовал. Есть код, нужно было добавить функцию
ЗадачаВам нужно написать функцию 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) {
int* array = new int[n_new];
if (source != NULL)
{
for (int i = 0; i < n_new && i < n_old; i++)
{
array[i] = source[i];
}
delete[] source;
source = nullptr;
}
return array;
}
Ошибки:
TEST
PASSED
==30678== 0 bytes in 1 blocks are definitely lost in loss record 1 of 1
==30678== at 0x4A06F70: operator new[](unsigned long) (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==30678== by 0x40153D: my_slightly_dumb_reallocation(int*, unsigned int, unsigned int) (002793.cpp:29)
==30678== by 0x40167D: main (002793.cpp:24)
==30678==
Помогите, пожалуйста, уж вообще никаких идей нет(