0

我怀疑双重释放错误会导致访问冲突(稍后在同一程序中)。

给定的类包含一个通用 TDictionary 并在使用 FMyDict.OnValueNotify 创建它后分配一个 ChangeNotification 处理程序:= 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 是零星出现的(在程序的数百次循环迭代中出现一次),我不能完全证明存在双重释放情况。

我的第一个想法是在释放对象之前在对象中设置一些“标记”。在第二次免费时,我可以看到该标记已设置。

或者是否有不同的“最佳实践”来检测双重自由?

4

0 回答 0