Форум: "Основная";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];
ВнизУказатели на уничтоженные объекты Найти похожие ветки
← →
Константинов © (2004-10-15 21:28) [0]Примерно такая конструкция:
PDataRec = ^TDataRec
TDataRec = record
ObjectA : TObject;
ObgectB : TObject;
ObjectC : TObject;
end;
var
List : TList;
DR : PDataRec;
A,B,C : TObject;
begin
GetMem(DR,SizeOF(TDataRec));
A := TObject.Create;
B := TObject.Create;
C := TObject.Create;
DR.ObjectA := A;
DR.ObjectB := B;
DR.ObjectC := C;
List.Add(DR);
...
List.Add(DR);
... короче несколько элементов списка ссылаются на один из объектов
A.Free; !!!
в списке List остался указатель на уничтоженный объект
и этот указатель <> nil
Delphi запросто читает данные из ячеек по указанному адресу, хотя
объект уже не существует.
Как с этим бороться?
Единственное, что приходит на ум, сканировать List на наличие указателя на объект А
перед его уничтожением... и присваивать ему nil
А если количество элементов списка несколько сотен тысяч!?
будут тормоза еще те...
Посоветуйте, что-нибудь поинтереснее...
← →
panov © (2004-10-15 21:31) [1]Создать наследника TList и с объектами работать как с элементами TList
← →
Мирон © (2004-10-16 10:48) [2]А если в лоб:
A.Free;
A := nil;
← →
begin...end © (2004-10-16 10:59) [3]
> [2] Мирон © (16.10.04 10:48)
FreeAndNil()
← →
Мирон © (2004-10-16 11:13) [4]
> Мирон © (16.10.04 10:48) [2][Ответить]
> begin...end © (16.10.04 10:59) [3
Сорри, автору это не поможет
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.037 c