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

Вопрос о динамическом выделении памяти - C++

Восстановить пароль Регистрация
 
ВиталикБВГ
11 / 10 / 3
Регистрация: 29.11.2009
Сообщений: 186
19.04.2010, 17:36     Вопрос о динамическом выделении памяти #1
Доброго времени суток всем. у меня вопрос к работе следующего кода:

delete[] values; // Удаляем массив из кучи
values = temp; // присваиваем адресу адрес нового массива(он тоже в куче находится)
temp = 0; // Сбрасываем указатель на массив,который находится в куче

мне вот что кажется неестественным:
-когда мы удаляем массив из кучи почему на него остаётся указатель?(мы ему присваиваем значение указателя на другой массив)
-когда мы присваиваем указателю temp ноль - ведь мы по сути приводим этим к утечке памяти? поскольку массив так и находится в куче,а указатель на него мы сбросили - мы к нему теперь не можем обратиться,а память он занимает? или я не правильно что-то понимаю?
заранее благодарю за ответы.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
oxotnik
 Аватар для oxotnik
1584 / 1061 / 33
Регистрация: 21.08.2008
Сообщений: 4,545
Записей в блоге: 1
19.04.2010, 17:40     Вопрос о динамическом выделении памяти #2
Цитата Сообщение от ВиталикБВГ Посмотреть сообщение
-когда мы удаляем массив из кучи почему на него остаётся указатель?
память помечается как свободная, но не очищается

Цитата Сообщение от ВиталикБВГ Посмотреть сообщение
-когда мы присваиваем указателю temp ноль - ведь мы по сути приводим этим к утечке памяти?
если где то сохранили адрес памяти до присвоения 0, то всегда можно будет по этому адресу отыскать блок памяти и корректно его удалить, к утечкам это не приведет
Alexandoros
226 / 64 / 4
Регистрация: 02.06.2009
Сообщений: 280
19.04.2010, 17:58     Вопрос о динамическом выделении памяти #3
int *p = new int[10];
int mas[123];
p = 0 или p = mas; // утечка, обратится не можем, удалить не можем, будет занимать память, пока не выйдем из процесса.
ВиталикБВГ
11 / 10 / 3
Регистрация: 29.11.2009
Сообщений: 186
20.04.2010, 08:56  [ТС]     Вопрос о динамическом выделении памяти #4
память помечается как свободная, но не очищается
А правильно я понимаю: область памяти становится доступной для перезаписи,но пока мы не запишем туда новое значение , в ней остаются те же значения и указатель на начало этих значений - т е на массив? т е функция delete просто разрешает перезаписать эту память в случае нужды?
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
20.04.2010, 09:40     Вопрос о динамическом выделении памяти #5
смысл delete в том, чтобы сделать память снова доступной для new

Добавлено через 12 минут
как в K&R2 написано про malloc() и free():
при первом вызове malloc() с помощью системного вызова, обращаясь к системе, запрашивает большой кусок памяти, отрезает от него часть и возвращает указатель на начало (оставшуюся часть добавляет в список свободной памяти), при последующих вызовах, она от этого же куска отрезает ещё часть и возвращает указатель на начало (оставшуюся часть добавляет в список свободной памяти); когда этого куска не хвататает, malloc() делает снова запрос к операционной системе, и добавляет ещё один большой кусок к первому куску (добавляет его в список свободной памяти)
free() возвращает отрезанный кусок в список свободных кусков (если нужно, склеивает соседние свободные узлы списка в один узел), malloc() потом может выбрать любой узел подходящего размера (разделит его, конечно, точно)
Yandex
Объявления
20.04.2010, 09:40     Вопрос о динамическом выделении памяти
Ответ Создать тему
Опции темы

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