Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
sacred363
1

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

26.10.2010, 22:36. Просмотров 584. Ответов 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];
или достаточно текущего варианта?
В отладчике смотрел оба варианта - все очищает одинаково, но дело в том что преподаватель этот вариант считает неправильным.
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.10.2010, 22:36
Ответы с готовыми решениями:

Не очищается динамическая память, codeblocks
При каждой новой прогонке сумма выдается все больше и больше. если что, само задание - в одномерном...

Динамические массивы: очищается ли память?
Здравствуйте. Подскажите, пожалуйста, по поводу динамических массивов. Допустим, есть вот такой...

Cpp. Как очищается память в функциях?
Я привык, что чисткой памяти занимается GC. А тут надо написать библиотеку на Cpp. От сюда базовые...

Очищается ли вся динамическая память по завершению программы?
#include&lt;stdio.h&gt; #include&lt;malloc.h&gt; #include&lt;string.h&gt; #include&lt;locale.h&gt; const int Max =...

2
В астрале
Эксперт С++
8023 / 4780 / 654
Регистрация: 24.06.2010
Сообщений: 10,558
26.10.2010, 22:49 2
sacred363, Полезнее delete[] a[i];
delete[] a;

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

А вообще, если задание не заключается конкретно в управлении памятью, то советую использовать контейнеры (по-умолчанию следует выбирать std::vector) — они сами следят за выделением и освобождением памяти. Сишные же массивы — устаревшая концепция, и в плюсах используется редко.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.10.2010, 01:42

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Правильно ли очищается память?
имеется структура typedef struct { LPCWSTR letter; } structura; объявляю из функции саму...

Не очищается память при завершении потока
Добрый день уважаемые форумчане. Из главного потока создаю поток который работает в цикле while...

Беда с курсором. Видимо, не очищается память
Есть у меня такой курсор: set @prodName = (select Product_name from inserted) set @prodQuant =...

Почему не очищается память после очистки List а?
Привет. Есть такой код: static void Main(string args) { ...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.