Форум программистов, компьютерный форум CyberForum.ru

Как правильно записать в виде функции выделение памяти для двумерного массива и ее освобождение - C++

Восстановить пароль Регистрация
 
Donville
0 / 0 / 0
Регистрация: 16.02.2014
Сообщений: 112
06.05.2014, 21:12     Как правильно записать в виде функции выделение памяти для двумерного массива и ее освобождение #1
Здравствуйте! Подскажите, как правильно записать в виде функции выделение памяти для двумерного массива и ее освобождение.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
//------------------------Выделение памяти------------------------------------
    int **mas = new int *[k];
 
    for (int i = 0; i < k; i++) {
      mas[i] = new int [m];
    }
 
 
 
    cout << "Enter matrix elements:";
    cout << endl;
 
    for (i=0; i<k; i++)//Заполняем массив
        {
        for (j=0; j<m; j++)
            {
                cout<<"Enter element ["<<i<<"]["<<j<<"] : ";
                cin>>mas[i][j];
            }   cout<<endl;
        }
 
    cout <<"Your matrix:"<<endl;
 
    for(i=0; i<k; i++)//Выводим сам массив
        {
            for(j=0; j<m; j++)
            {
                cout <<mas[i][j] <<"\t";
            }
 
            cout << endl;
        }
 
    //--------------------------Освобождение памяти----------------------------
    for (int i = 0; i < k; i++) {
      delete []mas[i];
    }
    delete []mas;
    mas = NULL; // Обнуление массива
Добавлено через 3 минуты
Для выделения:
C++
1
2
3
4
5
6
7
8
9
int** Allocation(int k, int m)
{        
        int **mass = new int *[k];
        for (int i = 0; i < k; i++) 
        {
             mass[i] = new int [m];  
        }
        return mass;
}
Добавлено через 5 минут
Помогите, пожалуйста, для освобождения.

Добавлено через 3 минуты
И вообще, скажите, правильно ли оно выделяет и освобождает память, а то я не знаю как на практике проверить.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.05.2014, 21:12     Как правильно записать в виде функции выделение памяти для двумерного массива и ее освобождение
Посмотрите здесь:

Выделение динамической памяти для двумерного массива. C++
выделение и освобождение памяти C++
C++ Динамическое выделение памяти для двумерного массива
C++ Выделение и освобождение памяти в c++
Освобождение и выделение памяти C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4322 / 3743 / 1260
Регистрация: 14.04.2014
Сообщений: 14,680
06.05.2014, 21:22     Как правильно записать в виде функции выделение памяти для двумерного массива и ее освобождение #2
Аналогично:
C++
1
2
3
4
5
    for (int i = 0; i < k; i++) 
        {
             delete[] mass[i];  
        }
    delete[] mass;
Donville
0 / 0 / 0
Регистрация: 16.02.2014
Сообщений: 112
06.05.2014, 21:38  [ТС]     Как правильно записать в виде функции выделение памяти для двумерного массива и ее освобождение #3
Так то да... Если Вы прокрутите первый код, то это увидите. Я не знаю как создать функцию таким образом и что она должна возвращать.

Добавлено через 4 минуты
C++
1
2
3
4
5
6
7
8
9
10
int** FREE(int k, int m)
{        
       for (int i = 0; i < k; i++)
       {
           delete []mas[i];
       }
       delete []mass;
       mas = NULL; // Обнуление массива
       return mass;
}
Так?
nmcf
4322 / 3743 / 1260
Регистрация: 14.04.2014
Сообщений: 14,680
06.05.2014, 21:40     Как правильно записать в виде функции выделение памяти для двумерного массива и ее освобождение #4
Ничего не надо возвращать, просто void. Для чего ты NULL присваиваешь? Просто для себя?
Donville
0 / 0 / 0
Регистрация: 16.02.2014
Сообщений: 112
06.05.2014, 21:58  [ТС]     Как правильно записать в виде функции выделение памяти для двумерного массива и ее освобождение #5
C++
1
2
3
4
5
6
7
8
9
void FREE(int k, int m)
{        
       for (int i = 0; i < k; i++)
       {
           delete []mas[i];
       }
       delete []mass;
       mas = NULL; // Обнуление массива
}
где-то читал, что NULL присваиваь это что-то вроде правила хорошего тона.

Добавлено через 5 минут
Функция то правильная?
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
06.05.2014, 22:01     Как правильно записать в виде функции выделение памяти для двумерного массива и ее освобождение #6
Цитата Сообщение от Donville Посмотреть сообщение
что NULL присваиваь это что-то вроде правила хорошего тона.
когда указатель за время своей жизни используется несколько раз для выделения/освобождения памяти, то действительно после освобождения памяти (delete) хорошо присвоить указателю NULL (nullptr) дабы исключить ситуацию со случайным повторным освобождением памяти и не нужно иметь дополнительный признак того, что память освобождена.

Добавлено через 47 секунд
Цитата Сообщение от Donville Посмотреть сообщение
Функция то правильная?
аргумент m лишний.
Donville
0 / 0 / 0
Регистрация: 16.02.2014
Сообщений: 112
06.05.2014, 22:12  [ТС]     Как правильно записать в виде функции выделение памяти для двумерного массива и ее освобождение #7
Скажите, как на практике проверить, что память выделилась и освободилась?
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
06.05.2014, 22:19     Как правильно записать в виде функции выделение памяти для двумерного массива и ее освобождение #8
Цитата Сообщение от Donville Посмотреть сообщение
что память выделилась и освободилась?
если new вернул ненулевой указатель, то память выделилась.
если в delete передать правильный указатель, то освобождение будет выполнено, никаких ошибок быть не должно.
Donville
0 / 0 / 0
Регистрация: 16.02.2014
Сообщений: 112
06.05.2014, 22:37  [ТС]     Как правильно записать в виде функции выделение памяти для двумерного массива и ее освобождение #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int** Allocation(int k, int m)
{
        int **mas = new int *[k];
        for (int i = 0; i < k; i++)
        {
             mas[i] = new int [m];
        }
        return mas;
}
 
 
void Deallocation(int k)
{
       for (int i = 0; i < k; i++)
       {
           delete []mas[i];
       }
       delete []mas;
       mas = NULL; // Обнуление массива
}
Ругается: 'mas' was not declared in this scope (строки 16 и 18).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.05.2014, 22:47     Как правильно записать в виде функции выделение памяти для двумерного массива и ее освобождение
Еще ссылки по теме:

резервирование памяти/освобождение памяти для трехмерного массива C++
Выделение памяти для двухмерного массива внутри функции C++
C++ Выделение и освобождение памяти для локальных переменных функций

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
06.05.2014, 22:47     Как правильно записать в виде функции выделение памяти для двумерного массива и ее освобождение #10
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Donville Посмотреть сообщение
Ругается: 'mas' was not declared in this scope (строки 16 и 18).
Логично. Внутри Deallocation() не объявлен mas.
Сделайте так в 12 строке:
C++
1
void Deallocation(int **mas, int k)
и при вызове передавайте первый аргументом то, что вернул Allocation.
Yandex
Объявления
06.05.2014, 22:47     Как правильно записать в виде функции выделение памяти для двумерного массива и ее освобождение
Ответ Создать тему
Опции темы

Текущее время: 21:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru