0

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 回目のフリーでは、このマーカーが設定されていることがわかりました。

または、ダブルフリーを検出するための別の「ベストプラクティス」はありますか?

4

0 に答える 0