Удалить массив С из памяти

103
29 сентября 2021, 13:10

Полный текст задания: Даны два массива А и И одинакового размера N. Определить функцию, возвращающую новый массив С того же размера, каждый элемент которого равен сумме элементов массивов А и В с тем же индексом. Исходные массивы передаются в функцию в качестве параметров.

Я сделал это следующим образом:

#include <iostream>    
using namespace std;
int *printarray(int A[], int B[],const int N,int *C)
{
    C = new int[N];
    for (int i = 0; i < N; ++i) {
        C[i] = A[i] + B[i];
    }
    return C;
}
int main()
{
    int N;
    setlocale(0, "rus");
    cout << "Введите размер массива: " << endl;
    cin >> N;
    cout << "Заполните числами массив А:" << endl;
    int* A = new int[N];
    for (int i = 0; i < N; ++i) {
        cin >> A[i];
    }
    cout << "Заполните числами массив В: " << endl;
    int* B = new int[N];
    for (int i = 0; i < N; ++i) {
        cin >> B[i];
    }
    int* C= new int;

    cout << "Новый массив С: " << endl;

    int *Y=printarray(A,B,N,C);
    for (int i = 0; i < N; i++)
        {
            cout << Y[i] << endl;
        }
    delete Y;
    delete A;
    delete B;
    delete C;
    system("pause");
    return 0;
}

Программа работает, но преподаватель говорит, что массив С всё равно не удалён. Я уже по-разному пробовал его удалить, но всё бес толку. Помогите разобраться. заранее спасибо.

Answer 1

Вы пишете:

 int* C= new int;

Дальше этот обьект нигде не удаляется, так как ваш указатель после вызова функции указывает на массив. После этого вы не массивы удаляете, а только их первые элементы. Одним словом, нужно просто обьявить С* (можете инициализировать нулем и удалить весь массив. Я бы сказал, что этот указатель вовсе и не нужен, как и не нужен последный аргумент вашей функции. Ведь она всеравно возвращает указатель на массив:

int *printarray(int A[], int B[],const int N)
{
    int* C = new int[N];
    for (int i = 0; i < N; ++i) 
        C[i] = A[i] + B[i];
    return C;
}
 //непонятно почему вы функцию так назвали...
int main() {
    //...
    int *Y=printarray(A,B,N);
    for (int i = 0; i < N; i++)
    {
        cout << Y[i] << endl;
    }
    delete []Y;
    delete []A;
    delete []B;
    //...
}
READ ALSO
C++, volatile и strict aliasing rules

C++, volatile и strict aliasing rules

Подскажите, пожалуйста, законно ли использование спецификатора volatile для локального обхода требований строгих псевдонимов?

196
Логирование в консоль Catch2

Логирование в консоль Catch2

Почему Catch2 не логирует сообщения? В пустом TEST_CASE пишу INFO("42");После запуска в консоли получаю:

159