![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Очистка памяти от массива экземпляров класса
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]Конструктор и деструктор класса пустые ?