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

Корректно ли освобождение выделенной памяти? - C++

Восстановить пароль Регистрация
 
Зеленый1
 Аватар для Зеленый1
2 / 2 / 0
Регистрация: 21.04.2011
Сообщений: 100
20.10.2011, 18:31     Корректно ли освобождение выделенной памяти? #1
Извиняюсь, если такой вопрос уже звучал. Допустим есть такой кусок кода:
C++
1
2
3
4
5
6
7
8
9
struct A
{
int *x;
} *b;
void main()
{
b = new A;
b->x = new int[10];
}
Как мне после завершения работы корректно освободить выделенную память? Сойдет ли просто
C++
1
delete b
или необходимо предварительно освободить память, которую занимает поле x?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
amor1k
Студент
 Аватар для amor1k
147 / 147 / 24
Регистрация: 18.01.2011
Сообщений: 469
20.10.2011, 18:55     Корректно ли освобождение выделенной памяти? #2
ну если освобождаешь х, то "delete b->x". А если всю структуру, то наверно же "delete b"
Зеленый1
 Аватар для Зеленый1
2 / 2 / 0
Регистрация: 21.04.2011
Сообщений: 100
20.10.2011, 19:02  [ТС]     Корректно ли освобождение выделенной памяти? #3
я имел ввиду, что если написать "delete b", то память, занимаемая полем х, освободится или останется "висеть" в оператиной памяти. Мы же для нее как бы отдельно память выделяем, поэтому наверно отдельно надо и освободить, но может я ошибаюсь?
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
20.10.2011, 20:19     Корректно ли освобождение выделенной памяти? #4
Цитата Сообщение от Зеленый1 Посмотреть сообщение
я имел ввиду, что если написать "delete b", то память, занимаемая полем х, освободится или останется "висеть" в оператиной памяти
Память, выделенная под x, останется неосвобожденной.
Зеленый1
 Аватар для Зеленый1
2 / 2 / 0
Регистрация: 21.04.2011
Сообщений: 100
20.10.2011, 20:33  [ТС]     Корректно ли освобождение выделенной памяти? #5
Kastaneda, благодарю! А если например у меня A - это не структура, а класс, в котором есть метод, который выделяет память для x. При вызове деструктора этого класса память также останется неосвобожденной?
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
20.10.2011, 20:43     Корректно ли освобождение выделенной памяти? #6
Зеленый1, каждому вызову new должен соответствовать вызов delete(в том или ином виде). Никаким другим способом, во время работы программы, динамически выделенная память не освобождается.
Bers
Заблокирован
20.10.2011, 20:45     Корректно ли освобождение выделенной памяти? #7
Цитата Сообщение от Зеленый1 Посмотреть сообщение
При вызове деструктора этого класса память также останется неосвобожденной?
Если в диструкторе класса вы пропишите код, который будит освобождать все захваченные ресурсы - тогда освободится. Если оставите пустой диструктор - будит утечка памяти.

Принцип тут простой - явно выделяли память на куче, явно освобождайте.
И ещё есть золотое правило: кто выделял, тот и освобождает.

Так то обычно, класс под свои нужды выделяет память в конструкторе, а освобождает в диструкторе.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.10.2011, 20:46     Корректно ли освобождение выделенной памяти?
Еще ссылки по теме:

C++ Освобождение памяти в c++
C++ Освобождение памяти, выделенной через new
Освобождение памяти, выделенной на динамический массив структур C++

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

Или воспользуйтесь поиском по форуму:
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
20.10.2011, 20:46     Корректно ли освобождение выделенной памяти? #8
Цитата Сообщение от Зеленый1 Посмотреть сообщение
А если например у меня A - это не структура, а класс, в котором есть метод, который выделяет память для x. При вызове деструктора этого класса память также останется неосвобожденной?
Если в деструкторе пропишешь delete []x;, то все будет в порядке)

Добавлено через 27 секунд
опоздал...
Yandex
Объявления
20.10.2011, 20:46     Корректно ли освобождение выделенной памяти?
Ответ Создать тему
Опции темы

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