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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2016, 17:23   #1
denis76560
Форумчанин
 
Регистрация: 13.01.2010
Сообщений: 121
По умолчанию Утечка памяти [Освобождение памяти массива]

Доброго времени суток уважаемые форумчане, столкнулся со следующей проблемой:
Имею код для распознавания изображений, а в процедуре procedure TForm1.MakeChars;
загружаются в память эталоны изображений, но при закрытии моей программы MadExcept показывает что в программе имеется утечка памяти,
знаю что при закрытии приложения память выделенная под него (приложение) высвобождается, но именно эта утечка портит мне общую картину.
Да и забивать на такие вещи - не кошерно, да и еще правила плохого тона.

Пробовал освобождать память массива так, но, увы не помогло

Код:
SetLength(myarray,0);
myarray:=nil;
Буду очень признателен за Ваши советы как в таком случаее освобождать память от загруженных данных из массива myarray.

Вот проблемный участок кода:

Код:
procedure TForm1.MakeChars;
var
  i : integer;
  myfile:textfile;
  filepath:string;
begin
 assignfile(myfile,ExtractFilePath(Application.Exename)+'base\kolvo.cfg');
 reset(myfile);
 readln(myfile,kolvo);
 SetLength(myarray,kolvo+1);
 myarray[0].bmp:=TBitmap.Create;

  for i:=1 to kolvo do
  begin
   readln(myfile,myarray[i].ch);
   readln(myfile,filepath);
   myarray[i].bmp:=TBitmap.Create;
   myarray[i].bmp.LoadFromFile(ExtractFilePath(Application.Exename)+'base\'+filepath);
  end;
 closefile(myfile);
end;


Ниже приложу архив с исходником, может кому-то так будет проще суть проблемы.
http://myfiles.pro/uploads/355530178.FORUM.rar
denis76560 вне форума Ответить с цитированием
Старый 27.11.2016, 18:01   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Для каждого битмапа Free, а потом уже SetLength(myarray,0) или myarray:=nil, это одно и то же
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 27.11.2016, 18:02   #3
denis76560
Форумчанин
 
Регистрация: 13.01.2010
Сообщений: 121
По умолчанию

Спасибо, только что сам допер =))
Не успел отписаться =)
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
  i:Integer;
begin
  For i:= 0 to kolvo do
   begin
   myarray[i].bmp.Free;
   end;
   end;
denis76560 вне форума Ответить с цитированием
Старый 27.11.2016, 18:08   #4
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,281
По умолчанию

Если есть TBitmap.Create, то должен быть и TBitmap.Free.
Код:
  for i := Low(myarray) to High(myarray) do
    if Assigned (myarray[i].bmp) then
      FreeAndNil (myarray[i].bmp);
  SetLength(myarray,0);
Sibedir вне форума Ответить с цитированием
Старый 27.11.2016, 18:20   #5
denis76560
Форумчанин
 
Регистрация: 13.01.2010
Сообщений: 121
По умолчанию

Да, это я знаю, спасибо большое всем за помощь.
denis76560 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Освобождение памяти vipok72 Общие вопросы Delphi 30 05.08.2015 00:09
Освобождение памяти SAMOUCHKA Общие вопросы по Java, Java SE, Kotlin 7 26.01.2014 21:24
Освобождение памяти Seran4ek Общие вопросы Delphi 7 21.12.2009 18:07
Освобождение памяти PUH Помощь студентам 1 22.11.2009 17:14
Освобождение Памяти в Си volotsky Помощь студентам 2 16.12.2008 22:36