mamadaliev
@mamadaliev
Intern Java Developer

Как очистить динамический память массива?

Доброго времени суток. А как очистить динамический память массива на языке C++? И что это вообще значит?

К примеру, есть такая программа:
/*
 * Тема: Обработка двумерных массивов
 */
#include <iostream>
#define MAX_N 5
#define MAX_M 10

void input(int *ptr[], int n, int m);
void output(int *ptr[], int n, int m);
void matrix(int *ptr[], int n, int m);

int main()
{
    int n, m; // n строк и m столбцов
    std::cout << "Input N rows (0<x<=" << MAX_N << "):";
    std::cin >> n; // ввод кол. n строк
    std::cout << "Input M columns (0<x<=" << MAX_M << "):";
    std::cin >> m; // ввод кол. m столбцов
    if (n > MAX_N or m > MAX_M)
    {
        std::cout << "===[Error! Plase, try again.]===\n";
        return 0;
    }
    int a[n][m];

    int *p[n];
    for (int i=0; i<n; i++) p[i] = a[i];
    input(p, n, m);

    int *t[n];
    for (int i=0; i<n; i++) t[i] = a[i];
    output(t, n, m);

    int *q[n];
    for (int i=0; i<n; i++) q[i] = a[i];
    matrix(q, n, m);

    int *r[n];
    for (int i=0; i<n; i++) r[i] = a[i];
    output(r, n, m);
}

/*
* Ввод элементов матрицы с клавиатуры
*/
void input(int *ptr[], int n, int m)
{
    for (int i=0; i<n; i++)
    {
        std::cout << "\n";
        for (int j=0; j<m; j++)
        {
            std::cout << "Input A[" << i << "][" << j << "]:";
            std::cin >> ptr[i][j];
        }
    }
}

/*
* Вывод элементов матрицы на экран после смены значений
*/
void output(int *ptr[], int n, int m)
{
    std::cout << "\nOutput:";
    for (int i=0; i<n; i++)
    {
        std::cout << "\n";
        for (int j=0; j<m; j++)
            std::cout << ptr[i][j] << "\t";
    }
    std::cout << "\n";
}

void matrix(int *ptr[], int n, int m)
{
    /*
    * Задание 1.
    * Вычислить сумму элементов для каждого столбца
    */
    int* s = new int[m]; // Динамически выделяем память (int s[m])
    for (int j=0; j<m; j++)
    {
        s[j]=0;
        for (int i=0; i<n; i++)
            s[j] += ptr[i][j];
    }

    // Debug: Sums of columns
    // std::cout << "\nSum:\n";
    // for (int i=0; i<m; i++)
    //     std::cout << "["<< i << "]" << s[i] << "; ";
    // std::cout << "\n";

    int max;
    int min = 0;
    for (int i=0; i<m; i++)
    {
        if (s[i] > s[i-1])
            max = i;
        if (s[i] <= s[min])
            min = i;
    }

    // Debug: max and min columns by sums
    // std::cout << "\n\nMin: " << min << "\n";
    // std::cout << "Max: " << max << "\n\n";

    /*
    * Задание 2.
    * Поменять местами столбцы с максимальным и минимальным значением суммы
    */
    for (int i=0; i<n; i++)
        std::swap(ptr[i][max], ptr[i][min]);
}


Или приведите свои примеры. Спасибо.
  • Вопрос задан
  • 1710 просмотров
Решения вопроса 1
zagayevskiy
@zagayevskiy
Android developer at Yandex
Пригласить эксперта
Ответы на вопрос 2
petermzg
@petermzg
Самый лучший программист
m_avrina
@m_avrina
Студентота.
Если Вы используете функцию new, в этом случаи delete
Если функцию new[] - delete[]
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы