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

Правильно ли очищается память? - C++

Восстановить пароль Регистрация
 
sacred363
Сообщений: n/a
26.10.2010, 22:36     Правильно ли очищается память? #1
сть программа которая работает с динамическим массивом.
работает она так:
C++
1
2
3
4
5
6
7
8
9
10
int** a = new int*[n];
 
for(int i=0; i<nl i++)
a[i] = new int[n];
 
// работа с массивом
 
for(int i = 0; i<n; i++)
delete a[i];
delete a;
Вопрос: правильно ли очищается память? В том смысле что нужно ли писать в цикле так:
delete[] a[i];
или достаточно текущего варианта?
В отладчике смотрел оба варианта - все очищает одинаково, но дело в том что преподаватель этот вариант считает неправильным.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2010, 22:36     Правильно ли очищается память?
Посмотрите здесь:

C++ Как правильно освободить память
Не могу правильно выделить память C++
C++ Cpp. Как очищается память в функциях?
C++ Как правильно освободить память
Как правильно освободить память C++
C++ Не очищается динамическая память, codeblocks
Правильно ли я освобождаю память C++
C++ Очищается ли вся динамическая память по завершению программы?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
26.10.2010, 22:49     Правильно ли очищается память? #2
sacred363, Полезнее delete[] a[i];
delete[] a;

Все же мы удаляем массивы.
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
27.10.2010, 01:42     Правильно ли очищается память? #3
Работа с памятью происходит по принципу стека: как память выделилась, так она и должна быть удалена. Если память выделялась под один объект, то есть оператором "new", то память освобождается оператором "delete", а если под массив (оператором "new[]"), то, соответственно, "delete[]". Удаление может срабатывать и с "не своим" оператором, но стандартом это не гарантируется, и потому в общем случае это ведёт к неопределённому поведению.

А вообще, если задание не заключается конкретно в управлении памятью, то советую использовать контейнеры (по-умолчанию следует выбирать std::vector) — они сами следят за выделением и освобождением памяти. Сишные же массивы — устаревшая концепция, и в плюсах используется редко.
Yandex
Объявления
27.10.2010, 01:42     Правильно ли очищается память?
Ответ Создать тему
Опции темы

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