N
N
Nikita2020-12-21 21:07:58
C++ / C#
Nikita, 2020-12-21 21:07:58

Identifier is not defined. How to solve this problem?

There is a part of the code, it is required to write a function. I wrote the function, but the compiler swears, I just can’t figure out what’s wrong.

Task
Вам нужно написать функцию 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;
}

My function:
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;
}

Answer the question

In order to leave comments, you need to log in

1 answer(s)
J
jcmvbkbc, 2020-12-21
@Nikitos2002

int* my_slightly_dumb_reallocation(int* source, unsigned int n_old, unsigned int n_new) {
    if (source == NULL) {
        int* array = new int[n_new];
    }
    ...
    return array;
}

the compiler complains

A variable arrayis defined in a block but return arrayis outside of that block. You either put return into the block, or take it int *array = new int[n_new];out of the block to the same level as return array.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question