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

Вниз

Освобождение памяти при завершении работы с 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.007 c
14-20189
Microsoft
2003-06-18 18:52
2003.07.07
Создание пиринговой сети


1-20139
Спрашивающий_
2003-06-25 03:39
2003.07.07
Опять мерцание рисунка.


4-20348
Mir
2003-05-07 07:04
2003.07.07
Как определить область выделенную мышкой?


1-20152
Kostya
2003-06-25 11:23
2003.07.07
Есть структура файла, а прочитать читать немогу


1-20156
denis24
2003-06-25 11:33
2003.07.07
массив tEdit





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский