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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
sacred363
Сообщений: n/a
#1

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

26.10.2010, 22:36. Просмотров 460. Ответов 2
Метки нет (Все метки)

сть программа которая работает с динамическим массивом.
работает она так:
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++ Очищается ли вся динамическая память по завершению программы?
C++ Как правильно освобождать память
Правильно ли в данной программе освобождается память? C++
C++ Динамические массивы: очищается ли память?
C++ Как правильно освободить память

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

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

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

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

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