Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Очистка памяти от массива экземпляров класса


Rembo ©   (2009-05-29 07:45:00) 

Есть статич. массив экзмепляров класса.
Заполняю так:
for i:=1 to elemscount do arr[i]:=TMyClass.Create;
Очищаю так:
for i:=1 to elemscount do arr[i].free;
где elemscount - количество эелементов, arr:array[1..6000] of TMyClass;
Сделал 2 кнопки заполнить, очистить
В дисспетчере задач вижу что при последовательных нажатиях "заполнить", "очистить" программа начинает исспользовать все больше памяти а не должна!
Что не так?


Vitaliy_____   (2009-06-18 13:25:00) [1]

Анатолий, Вы не правы :)
Калибруйте телепаторы! Сергей М.[10] все правильно написал. Это не мой вопрос. Я просто как всегда коряво написал.
Эх, иногда лучше молчать, чем говорить :)


Anatoly Podgoretsky   (2009-05-29 17:56:00) [2]

Типичный Партизан!


Dennis I. Komarov   (2009-05-29 13:42:00) [3]


> Не надо пороть ерунды, а стоит ещё раз прочитать вопрос
> [0], в частности описание массива ;-)

Я видел описание - смайлы смотрите...


Плохиш   (2009-05-29 13:39:00) [4]


> Dennis I. Komarov ©   (29.05.09 10:43) [12]
>
>


> Ega23 ©   (29.05.09 10:48) [13]
>
>

Не надо пороть ерунды, а стоит ещё раз прочитать вопрос [0], в частности описание массива ;-)


brother   (2009-05-29 11:01:00) [5]

> Цикл сам все проверит.

он еще круче, чем те перцы ;)


Юрий Зотов   (2009-05-29 10:49:00) [6]

> Dennis I. Komarov ©   (29.05.09 10:43) [12]

В такихслучаях крутые перцы не проверяют есть ли чего считать. Цикл сам все проверит.


Ega23   (2009-05-29 10:48:00) [7]


> if ElementCount>0 then
>  for i:=0 to ElementCount-1 do


Проверка не нужна. Достаточно   for i:=0 to ElementCount-1 do


Dennis I. Komarov   (2009-05-29 10:43:00) [8]

Крутые перцы считают с "0", а не с "1" ;)
а перед тем, как пойти в цикл проверяют есть ли чего считать:

if ElementCount>0 then
 for i:=0 to ElementCount-1 do


Rembo   (2009-05-29 10:39:00) [9]

Нашел проблему:
Очистка:
elemscount:=0;
for i:=1 to elemscount do arr[i].free;


Сергей М.   (2009-05-29 10:37:00) [10]


> Rembo   (29.05.09 10:24) [5]

Пардон, Vitaliy_____   (29.05.09 09:02) [2] влез в тему так что показалось, что он и ты - одна и та же персона)


> Конструктор и деструктор пустые


Тогда есть сомнения, что приведенный изначально код соответствует реальному.
Судя по нему и по коду в [5] утечек быть не должно, даже если TaskManager будет бессовестно врать по этому поводу.

После десятка этих последовательных нажатий попробуй свернуть/переключить фокус ввода.вернуть фокус ввода/развернуть окно формы - NaskManager должен показать истину.


brother   (2009-05-29 10:30:00) [11]

> Сделал 2 кнопки заполнить, очистить

код давай
зы такой ООП в топку имхо


brother   (2009-05-29 10:28:00) [12]

> TSprite = class


> TSprite = class(Object)

одинаково


brother   (2009-05-29 10:26:00) [13]

> формальность так сказать?

нет конечно, этим ты вызывашь деструктор предка, что требуется всегда


Rembo   (2009-05-29 10:25:00) [14]

Упс!
TSprite = class(Object)
исправил, проблема осталась


Rembo   (2009-05-29 10:24:00) [15]

Какая партизанщина? Вы за кого меня держите!
Конструктор и деструктор пустые да, че писать в дуструктор не знаю. Вот описание классов:
TSprite = class
 x,y,width,height,animpos,framewidthu:Integer;
 v1,v2,v3,v4:TMPoint;
 txhor,txvert,texcol,texpos:Single;
 presed,visible,useantiallising,usealpha:Boolean;
 angle,radius:Real;
 alpha:Byte;
 actionproc:procedure;
 procedure send;
 procedure sendvs;
 procedure sendin(ix,iy:integer);
 procedure linesend(fp:TPoint);
 function getrect:TRect;
 procedure render;
 procedure init(texname:byte;framecount,framewidth:integer);
 private
 tex:byte;
 texsize:Word;
 framenum:Byte;
 end;

TMyClass=class(TSprite)
deathtime:LongWord;
hp,maxhp,gcost:integer;
dead:Boolean;
gbarw:Byte;
movex,movey,row,col:integer;
speed:Single;
onmove:Boolean;
sx,sy:Single;
step:word;
rnd:Byte;
path:array[1..1000] of TPoint;
procedure moveto(mcol,mrow:byte);
end;


Непойму че ваще можно написать в деструкторе, или просто он должен быть
destructor TSprite.destroy;
begin
....
inherited;
end;
формальность так сказать?


Ega23   (2009-05-29 10:22:00) [16]


> Скорей всего моя проблема - у класса не так деструктор сделан,
>  прочитай ветку


Тебе уже вроде всё объяснили....


Сергей М.   (2009-05-29 09:07:00) [17]

Ну и зачем нужно было заводить еще одну ветку, да и еще и с партизанщиной ?


Vitaliy_____   (2009-05-29 09:02:00) [18]

Скорей всего моя проблема - у класса не так деструктор сделан, прочитай ветку
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1242878656&n=18


Сергей М.   (2009-05-29 08:23:00) [19]

Конструктор и деструктор класса пустые ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо