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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.11.2016, 20:23   #1
factually
Пользователь
 
Регистрация: 24.10.2016
Сообщений: 21
По умолчанию Изображения не освобождаются из памяти после удаления

Код:
public
simage: array of TsImage;

procedure TForm1.sBitBtn2Click(Sender: TObject);
var i:integer;
image:TPNGObject;
M: TMemoryStream;
begin
SetLength(simage,imglinks.count);
for i:=0 to imglinks.count-1 do begin
M:=TMemoryStream.Create;    
HTTP.Get(imglinks[i],M);   
 M.Position:=0;
simage[i]:=TsImage.Create(form1);
simage[i].parent:=panel;
Image := TPNGObject.Create;
Image.LoadFromStream(m);
Simage[i].Picture.Graphic := Image;
simage[i].left:=simage[i].left+50;
end;
        FreeAndNil(m);
        FreeAndNil(image);
        FreeAndNil(http);
end;
Пробовал по-разному освобождать память от самого массива и всех элементов в нем, но ничего не выходит. При выполнении sBitBtn2Click память забивается от новых картинок, но не отчищается от старых, хотя сами картинки удаляются.
Пр.:
Код:


procedure TForm1.sBitBtn3Click(Sender: TObject);
var i:integer;
begin
  for I:=0 to imglinks.count-1 do begin
simage[i]:=nil;
  end;
end;

Последний раз редактировалось factually; 07.11.2016 в 20:41.
factually вне форума Ответить с цитированием
Старый 07.11.2016, 20:41   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
        FreeAndNil(m);
        FreeAndNil(image);
это нужно в цикле делать, для каждого, а не один раз для последнего. А это что:
Код:
simage[i]:=nil;
Тоже Free, присвоение nil не освободит
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 07.11.2016, 20:42   #3
factually
Пользователь
 
Регистрация: 24.10.2016
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Код:
        FreeAndNil(m);
        FreeAndNil(image);
это нужно в цикле делать, для каждого, а не один раз для последнего. А это что:
Код:
simage[i]:=nil;
TsImage объект? Тогда тоже Free, Присвоение nil не освободит
Free тоже пробовал, результата нет, память не освобождается.
factually вне форума Ответить с цитированием
Старый 08.11.2016, 09:10   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Впрочем об этом уже написали
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 08.11.2016 в 09:12.
evg_m на форуме Ответить с цитированием
Старый 08.11.2016, 13:23   #5
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Цитата:
Сообщение от factually Посмотреть сообщение
Free тоже пробовал, результата нет, память не освобождается.
Что у вас происходит при каждом выполнении sBitBtn2Click?
У вас каждый раз создается новый(!) массив Simage[i]...
А где уничтожение старого массива???
Вы сами плодите массивы картинок и удивляетесь, что память забивается...
kropotkina-alice вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AJAX Обновление данных после удаления Mick_20 JavaScript, Ajax 4 12.12.2012 16:48
После удаления перестали работать стили mrgrudge PHP 3 01.12.2010 13:35
Создание пользователя, после его удаления Droid БД в Delphi 0 21.05.2010 00:39
Очищение DateTimePicker после удаления записи Droid БД в Delphi 9 21.10.2009 15:57
Очистка формата после удаления макроса valerij Microsoft Office Excel 2 14.06.2008 12:00