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

Вниз

Заполнение и очистка TList   Найти похожие ветки 

 
Max ©   (2004-03-07 12:43) [0]

Есть такой код:

type
 PLType = ^ALType;
 ALType = record
   Name: String;
   Type: Byte;
 end;

var
 List: TList;  

...

procedure TForm1.FormCreate(Sender: TObject);
var
 I: Integer;
 Item: PLType;
begin
 for I := 1 to 100 do
 begin
   New(Item);
   ...
   List.Add(Item);
 end;
end;


При выходе List очищается таким образом:

procedure TFrom1.FormDestroy(Sender: TObject);
var
 I: Integer;
 Item: PLType;  
begin
 for I := 0 to List.Count - 1 do
 begin
   Item := List.Items[I];
   Dispose(Item);
 end;
 List.Clear;
 List.Free;
end;


Можно это делать таким образом, т.е. заменить PLType на Pointer? Будет ли это правильно?

procedure TFrom1.FormDestroy(Sender: TObject);
var
 I: Integer;
 Item: Pointer;  
begin
 for I := 0 to List.Count - 1 do
 begin
   Item := List.Items[I];
   Dispose(Item);
 end;
 List.Clear;
 List.Free;
end;


 
Digitman ©   (2004-03-07 13:10) [1]

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


 
panov ©   (2004-03-07 13:10) [2]

Нет, правильно в первом случае, либо в строчке с Dispose надо приводить указатель к нужному типу, так как компилятор не знает тип переменной, на которую ссылается Pointer.


 
Max ©   (2004-03-07 13:24) [3]

panov
Dispose(PLType(Item)) - так?


 
Digitman ©   (2004-03-07 13:29) [4]

procedure TFrom1.FormDestroy(Sender: TObject);
var
I: Integer;
begin
with List do
try
 for I := 0 to Count - 1 do
  Dispose(PLType(Items[I]));
finally
 Free;
end;
end;



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

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

Наверх




Память: 0.47 MB
Время: 0.038 c
1-1079013910
sherminator
2004-03-11 17:05
2004.03.28
ComboBox и исходное состояние...


3-1077647053
Dimedrol
2004-02-24 21:24
2004.03.28
Foreign Keys и индексы


3-1077873360
Janbolat
2004-02-27 12:16
2004.03.28
Суммирование в DBGRID е


3-1077912152
jafar
2004-02-27 23:02
2004.03.28
Передача параметра типа TDaateTime в TADOQuery


3-1077159983
Sirus
2004-02-19 06:06
2004.03.28
Максимальное количество Insert и Update в одной тарнзакции...