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

Вниз

Освобождение памяти при завершении работы с Tlist   Найти похожие ветки 

 
INTAARI ©   (2003-06-25 11:25) [0]

Привет колеги!!!
Имеется список с числом указателей 120. Каждые 2 секунды происходит добавление элемента в начало списка с выделением память. У меня возник вопрос, надоли освобождать память вылетевшей из списка записи. Так как получается, что я только выделяю память, и не очищаюь ее. Приложение при отладке работает стабильно без сбоев, память не пожирает, но при закрытии приложение говорит, что ошибка при работе с ячейкой памяти FFFFF ...


procedure TForm1.FormShow(Sender: TObject);
type tps:^real
var
WDlist :Tlist;
Dir:^real;

begin
WDlist:=tlist.Create;
end;

. . . . .

WDlist.count:=120;
WDlist.Capacity:=WDlist.count;
new(Dir);
WDlist.Insert(0,dir);
WDlist.Pack;
. . . . .


procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
WDlist.Destroy;
end;


 
panov ©   (2003-06-25 12:23) [1]


procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
i: Integer;
begin
for i := 0 to WDlist.Count-1 do
begin
DisPose(WDlist.Items[i]);
end;
WDlist.Free;
end;



Кроме того, лучше свой тип переопределить(мне кажется):
type
PReal = ^Real;
var
WDlist :Tlist;
Dir: PReal;
...


 
гончий   (2003-06-25 14:10) [2]

Вот вообще без переменных (заодно и лист от Item"ов очистишь):
--------------------------
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
while WDlist.Count > 0 do
begin
DisPose(WDlist.Items[0]);
WDlist.Delete(0);
end;
WDlist.Free;
end;


 
INTAARI ©   (2003-06-25 16:21) [3]

Спасибо гончий и panov за ответы. Вопрос состоит немногов в другом. Как освобождать память не при завершении программы, а в процессе ее работы. Т. е. каждые 2 секунды происходит добавление элемента в начало списка с выделением память, число элементов фиксированное, как мне очистить ту память которая была выделена под переменные "вылетевшие" из списка.


 
MBo ©   (2003-06-25 16:26) [4]

перед тем, как указатель будет удален из списка, очищай. В чем проблема-то?


 
icWasya ©   (2003-06-25 16:27) [5]

может так

new(Dir);
WDlist.Insert(0,dir);
DisPose(WDlist.Items[120]);
WDlist.Delete(120);
WDlist.Pack;


 
panov ©   (2003-06-25 16:38) [6]

Зачем только в начало списка вставлять - непонятно.

Для того, чтобы было красиво сделано, переопредели класс TList на свой.


 
INTAARI ©   (2003-06-25 16:43) [7]

Добавление в начало нужно, что бы после каждого добавления нового значения произодить вычисление максимальных и минимальных значений, я просто этот кусов кода не привел в тексте.


 
MBo ©   (2003-06-25 16:47) [8]

может, имеет смысл не список, а

var A: array[0..119] of double;

добавление:

A[Counter mod 120]:=NewValue;
Inc(Counter);



 
panov ©   (2003-06-25 16:48) [9]

Все равно непонятно, как вставка в начало может помочь в вычислении таких значений.


 
INTAARI ©   (2003-06-25 17:12) [10]

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


 
MBo ©   (2003-06-25 17:18) [11]

>INTAARI
Мое предложение не устраивает?


 
INTAARI ©   (2003-06-25 17:24) [12]


> MBo

Устраивает, но надо добавить несколько строк, чтобы когда масив заполнится началось передвижение данных при добавлении, в начало новых.


 
MBo ©   (2003-06-25 17:31) [13]

Зачем? i-й по "старости" элемент - (Counter+i) mod 120


 
Anatoly Podgoretsky ©   (2003-06-25 17:36) [14]

Зачем тут список, когда достаточно статического массива, который при желании очень быстро смещается в любую стронону.


 
Armen   (2003-06-25 17:47) [15]

>INTAARI © (25.06.03 16:43)
>Добавление в начало нужно

Dlya etogo v Delphi est" TStack i TQueue.



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

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

Наверх




Память: 0.5 MB
Время: 0.01 c
1-20054
INTAARI
2003-06-25 11:25
2003.07.07
Освобождение памяти при завершении работы с Tlist


14-20262
Ru
2003-06-18 13:19
2003.07.07
Споем :)


14-20292
BJValentine
2003-06-20 13:35
2003.07.07
Глюк!


1-20069
anod
2003-06-25 15:55
2003.07.07
Как определить одновременное нажатие клавиш


8-20169
vvvaaa
2003-03-17 12:23
2003.07.07
Цвета в BitMap