Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.08.16;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.007 c
15-1244962151
Virgo_Style
2009-06-14 10:49
2009.08.16
Ищу программку


2-1245139484
a.a.j.
2009-06-16 12:04
2009.08.16
EmbeddedWB и PNG


4-1214295759
Sashahttp
2008-06-24 12:22
2009.08.16
Определить "Код экземпляра устройства" (CD-ROM)


2-1245219624
b/@.
2009-06-17 10:20
2009.08.16
Странный зависон приложения :(


15-1244174940
Дмитрий С
2009-06-05 08:09
2009.08.16
Русские буквы в названиях таблиц/полей MySQL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский