瀏覽代碼

fcl-base: TAVLTree.FreeAndClear: clear Root while freeing to avoid accidental access

mattias 2 年之前
父節點
當前提交
f23001b973
共有 1 個文件被更改,包括 9 次插入1 次删除
  1. 9 1
      packages/fcl-base/src/avl_tree.pp

+ 9 - 1
packages/fcl-base/src/avl_tree.pp

@@ -1146,9 +1146,17 @@ procedure TAVLTree.FreeAndClear;
   end;
 
 // TAVLTree.FreeAndClear
+var
+  r: TAVLTreeNode;
 begin
   // free all data
-  FreeNodeData(Root);
+  r := Root;
+  FRoot := nil; // Prevent any being-destroyed object from removing its node.
+  try
+    FreeNodeData(r);
+  finally
+    FRoot := r;
+  end;
   // free all nodes
   Clear;
 end;