Вопрос более или менее говорит все это. Учитывая следующую рекордную структуру:
type
TPerson = record
Name: string;
Age: Integer;
end;
PPerson = ^TPerson;
TPersonList = TList<TPerson>;
Действительно ли следующий код действителен?
procedure ReadPeople(DataSet: TDataSet; PersonList: TPersonList);
begin
PersonList.Count := DataSet.RecordCount;
if DataSet.RecordCount = 0 then
Exit;
DataSet.First;
while not DataSet.Eof do begin
PersonList[DataSet.RecNo].Name := DataSet.FieldByName('Name').AsString;
PersonList[DataSet.RecNo].Age := DataSet.FieldByName('Age').AsInteger;
DataSet.Next;
end;
end;
Сделайте я должен использовать GetMem
/FreeMem
выделить и освободить записывают экземпляр TPersonList
, или действительно ли я свободен к непосредственно доступу TPersonList
записи непосредственно? Мой пищеварительный тракт говорит, что код должен быть действительным, хотя я не уверен, существуют ли какие-либо морщины, связанные с рекордной инициализацией или завершением.
Ваш код в порядке. Когда вы используете Tlist
с записями, он обрабатывает их как типы значений, подлежащие копированию. Для них не нужно выделять указатели.
Вопрос: почему вы объявляете PPerson? Убедитесь, что вы случайно не пытаетесь освободить память TRecord из вашего списка, на который вы указывали в переменной PPerson.