Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2009, 13:47   #1
Seran4ek
Пользователь
 
Регистрация: 14.10.2009
Сообщений: 94
По умолчанию Освобождение памяти

В ходе выполнения программы у меня заполняется динамический массив. ну и при нажатии кнопки я устанавливаю длинну массива в ноль. но при этом память не освобождается. как быть?
Seran4ek вне форума Ответить с цитированием
Старый 19.12.2009, 14:15   #2
vasek123
Заблокирован
 
Регистрация: 21.11.2008
Сообщений: 4,986
Сообщение

А исходник не выложите, или тут одни экстрасенсы?
vasek123 вне форума Ответить с цитированием
Старый 21.12.2009, 11:06   #3
Greek9000
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 151
По умолчанию

Старайтесь следовать правилам:
На каждый вызов процедуры New(ptr) должен быть вызов Dispose(ptr).
На каждый вызов ex := TMyClass.Create вызывайте ex.Free. (Это не всегда нужно для наследников TControl, где эти вызовы помещены в деструктор, но в конечном счёте правило остаётся верным: один Create - один Free)
Функция SetLength(arr, 0) освобождает только динамические массивы (в т. ч. строки)

Это минимальный набор условий, при соблюдении которых исключается большое количество утечек памяти (ессно - это из моего личного опыта и на полноту и точность не претендую)
Greek9000 вне форума Ответить с цитированием
Старый 21.12.2009, 13:24   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вопрос, а вы как проверяете освободилась память или нет?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 21.12.2009, 16:49   #5
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
вопрос, а вы как проверяете освободилась память или нет?
Видимо классический случай. Как вариант, могу предположить что, диспетчер памяти Windows просто пометил "освобожденное" место в памяти как свободное, но не освобождал его "физически". Зачем ? Ну вот если на ПК есть еще куча свободного ОЗУ, то тогда будет не критически оставлять тот кусок, и если к примеру через 5 секунд ваше приложение запросит часть или больше (страниц) памяти под что-то, то Windows мгновенно предоставит вам раннее "освобожденные" страницы памяти. Хотя может я и ошибаюсь, но это вполне логично для улучшения, повышения производительности работы.
BOBAH13 вне форума Ответить с цитированием
Старый 21.12.2009, 16:55   #6
Seran4ek
Пользователь
 
Регистрация: 14.10.2009
Сообщений: 94
По умолчанию

Цитата:
вопрос, а вы как проверяете освободилась память или нет?
ну диспетчером. что под руку попалось)
в итоге гдето прочол что для освобождения памяти из под динамического массива требуется остановить его значение равным NIL.
до этого я просто использовал SetLength()
Seran4ek вне форума Ответить с цитированием
Старый 21.12.2009, 17:56   #7
Dzmitry Loktseu
Пользователь
 
Регистрация: 17.12.2009
Сообщений: 18
По умолчанию

подключай FastMM и смотри что освободилось, а что нет.
Dzmitry Loktseu вне форума Ответить с цитированием
Старый 21.12.2009, 18:07   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

BOBAH13, я именно поэтому и спросил
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Освобождение памяти PUH Помощь студентам 1 22.11.2009 17:14
Освобождение памяти VadEr Общие вопросы Delphi 2 17.04.2009 22:23
Освобождение памяти занимаемой объектом Oburec Общие вопросы Delphi 10 16.04.2009 10:54
Освобождение памяти AlexandrSid Общие вопросы Delphi 3 02.02.2009 13:45
Освобождение Памяти в Си volotsky Помощь студентам 2 16.12.2008 22:36