Я подозреваю, что ошибка двойного освобождения приводит к нарушению доступа (позже в той же программе).
Данный класс содержит Generi c TDictionary и назначает обработчик ChangeNotification после его создания с помощью FMyDict .OnValueNotify: = ChangeNotification;
procedure TMyClass.ChangeNotification(Sender: TObject; const Item: TMyValueType; Action: TCollectionNotification);
begin
if Action = cnRemoved then begin
Item.Free;
end;
end;
Если я раскомментирую Item.Free, AV больше не возникает.
Но поскольку AV появляется спориадно (один раз в несколько сотен l oop итераций в программе), я не могу точно доказать, что существует ситуация двойного освобождения.
Моя первая идея - установить какой-нибудь «маркер» на объекте перед его освобождением. На втором бесплатном я увидел, что этот маркер установлен.
Или есть другая «лучшая практика» для обнаружения двойного освобождения?