Форум: "Основная";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];
ВнизЗаполнение и очистка 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.059 c