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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.12.2017, 12:45   #11
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Цитата:
а как очистить( в смысле освободить память) "простую" целочисленную переменную.
При определенной длины строки память конечно не освободит, а просто занулит строку но зато не даст ей разрастаться и можно пользоваться одной функцией очистки например FillChar не делая свою функцию, чем удобно для множества переменных в записи и компактности своего кода в проекте.

Последний раз редактировалось Aliens_wolfs; 25.12.2017 в 12:51.
Aliens_wolfs вне форума Ответить с цитированием
Старый 25.12.2017, 13:32   #12
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Aliens_wolfs Посмотреть сообщение
При определенной длины строки память конечно не освободит, а просто занулит строку но зато не даст ей разрастаться
либо я Вас не понял, либо это бессмыслица какая-то (уж не обижайтесь на прямоту).

Может быть, уже хватит спорить с очевидным - очищать переменные нужно так, чтобы не было утечек памяти!
И это должен делать программист.
и это зависит от конкретных данных и от решаемых задач.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.02.2020, 08:51   #13
neweraser
Новичок
Джуниор
 
Регистрация: 22.05.2012
Сообщений: 1
По умолчанию

Перечитал тему, уж извините, что поднимаю, но проще было прописать
Код:
ReportMemoryLeaksOnShutdown:= True;
и проверять на утечки. Пришел к выводу, что лучше очищать вручную, т.к. приведенные выше способы либо очищают структуру не полностью, либо с утчечками:
Код:
  FillChar(MyRecord, SizeOf(MyRecord), 0); - утечка
  FillChar(Pointer(MyRecord)^, SizeOf(TMyRecord), 0); утечка
  Finalize(Pointer(MyRecord)^); //- не чистится, утечка
  FillChar(MyRecord^, SizeOf(TMyRecord), 0); - утечка
  Finalize(MyRecord^); - чистятся только строки + утечка
  dispose(MyRecord); - чистятся только строки
Кстати, если самому выделять память для record, то числовые типы забиваются случайными данными.
Ну это опять же смотря для какой задачи.

upd. А можно еще так, без указателей. Проверял на массивах, целочисленных, строках и булевых:
Код:
  Finalize(MyRecord); // Удалит строки
  FillChar(MyRecord, SizeOf(MyRecord), 0); // Все остальное

Последний раз редактировалось neweraser; 07.02.2020 в 09:25. Причина: Можно и не вручную
neweraser вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Очистить массив Shouldercannon Общие вопросы Delphi 3 24.12.2017 22:07
Использование record в record Anton911 Общие вопросы Delphi 7 03.05.2012 08:49
очистить $_POST[] BaiAs PHP 2 24.01.2011 15:47
В чём различие записей Record от Packed Record? Terran Общие вопросы Delphi 7 08.06.2010 17:14
Record / Packed Record Alex Cones Общие вопросы Delphi 7 11.11.2009 10:43