TDictionary ChangeNotification: есть ли способ обнаружить ошибку двойного освобождения? - PullRequest
0 голосов
/ 17 июня 2020

Я подозреваю, что ошибка двойного освобождения приводит к нарушению доступа (позже в той же программе).

Данный класс содержит 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 итераций в программе), я не могу точно доказать, что существует ситуация двойного освобождения.

Моя первая идея - установить какой-нибудь «маркер» на объекте перед его освобождением. На втором бесплатном я увидел, что этот маркер установлен.

Или есть другая «лучшая практика» для обнаружения двойного освобождения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...