@Nikitos2002

Идентификатор не определен. Как решить эту проблему?

Есть часть кода, требуется написать функцию. Функцию я написал, вот только компилятор ругается, никак не могу понять, что не так.
Задача
Вам нужно написать функцию 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;
}
  • Вопрос задан
  • 52 просмотра
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
http://dilbert.com/strip/1998-08-24
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;
}

компилятор ругается,

Переменная array у тебя определена в блоке, а return array стоит вне этого блока. Ты либо return в блок занеси, либо int *array = new int[n_new]; из блока вынеси на один уровень с return array.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы