double-free エラーがアクセス違反につながると思われます (後で同じプログラム内で)。
指定されたクラスにはジェネリック TDictionary が含まれており、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 は散発的に (プログラム内の数百回のループ反復に 1 回) 出現するため、ダブル フリーの状況があることを正確に証明することはできません。
私の最初のアイデアは、オブジェクトを解放する前に、オブジェクトに「マーカー」を設定することです。2 回目のフリーでは、このマーカーが設定されていることがわかりました。
または、ダブルフリーを検出するための別の「ベストプラクティス」はありますか?