Страница 1 из 1

EOutOfResources - как убрать

Добавлено: Пн май 03, 2010 5:20 pm
blackstrip
На заметку программистам.

Если в Дельфе пишете прогу, которая повторяет мильён раз какую то операцию, и у вас выскакивает подобная шляпа - значит вы скорее всего забили оперативку своими объектами.

ЛЮБОЙ объект, который вы создаете, например

procedure Preved();
var
a:TBitmap;
begin
a := TBitmap.Create;
//дальше его тут используете во все дыры...
end;


Необходимо убить в конце этой же процедуры когда он вам больше не нужен!

Чтоб было так:
procedure Preved();
var
a:TBitmap;
begin
a := TBitmap.Create;
//дальше его тут используете во все дыры...
//а потом убиваете
a.Free;
end;


Дельфя сама, подобно яве, ничего убивать не умеет. Никаких GarbageCollectoroв в ней нет. Отсюда много раз Create поделаете - и привет. Даже вроде бы процедура кончилась, и локальный объект должен был теоретически удалиться бы (т.к. после смерти локального указателя ничего больше на созданный объект не указывает). Но нет - ничего само не удаляется. Бесхозные объекты могут висеть в памяти сколько хочешь.

А я то раньше думал - чо это у меня в дельфе в прогах, которые что нибудь в памяти сильно с картинками делают - какие то исключения иногда выскакивают. А тут вот оно что.