Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.08.16;
Скачать: CL | DM;

Вниз

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

 
Rembo   (2009-05-29 07:45) [0]

Есть статич. массив экзмепляров класса.
Заполняю так:
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 кнопки заполнить, очистить
В дисспетчере задач вижу что при последовательных нажатиях "заполнить", "очистить" программа начинает исспользовать все больше памяти а не должна!
Что не так?


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

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


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

Скорей всего моя проблема - у класса не так деструктор сделан, прочитай ветку
http://delphimaster.net/view/2-1242878656/


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

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


 
Ega23 ©   (2009-05-29 10:22) [4]


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


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


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

Какая партизанщина? Вы за кого меня держите!
Конструктор и деструктор пустые да, че писать в дуструктор не знаю. Вот описание классов:
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;
формальность так сказать?


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

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


 
brother ©   (2009-05-29 10:26) [7]

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

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


 
brother ©   (2009-05-29 10:28) [8]

> TSprite = class


> TSprite = class(Object)

одинаково


 
brother ©   (2009-05-29 10:30) [9]

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

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


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


> Rembo   (29.05.09 10:24) [5]

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


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


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

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


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

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


 
Dennis I. Komarov ©   (2009-05-29 10:43) [12]

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

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


 
Ega23 ©   (2009-05-29 10:48) [13]


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


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


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

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

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


 
brother ©   (2009-05-29 11:01) [15]

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

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


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


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


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

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


 
Dennis I. Komarov ©   (2009-05-29 13:42) [17]


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

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


 
Anatoly Podgoretsky ©   (2009-05-29 17:56) [18]

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2009.08.16;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.012 c
1-1212141167
dmitry_12_08_74
2008-05-30 13:52
2009.08.16
Как добавлять 32-х битные картинки на компонент типа TSpeedButton


15-1245064618
Пит
2009-06-15 15:16
2009.08.16
Удлинитель ТВ-выхода?


11-1205403546
DJ_UZer
2008-03-13 13:19
2009.08.16
Перевод из инт в стр


15-1244795544
dmitry1991
2009-06-12 12:32
2009.08.16
ООП


15-1244962151
Virgo_Style
2009-06-14 10:49
2009.08.16
Ищу программку