浏览代码

Avoid memory leak on trecorddef.variantrecorddesc field

git-svn-id: trunk@34363 -
pierre 9 年之前
父节点
当前提交
dfeb6e3ae1
共有 1 个文件被更改,包括 20 次插入0 次删除
  1. 20 0
      compiler/symdef.pas

+ 20 - 0
compiler/symdef.pas

@@ -4450,7 +4450,27 @@ implementation
 
 
     destructor trecorddef.destroy;
+
+      procedure free_variantrecdesc(var variantrecdesc : pvariantrecdesc);
+        var
+          i : longint;
+        begin
+         while assigned(variantrecdesc) do
+           begin
+             for i:=0 to high(variantrecdesc^.branches) do
+               begin
+                 free_variantrecdesc(variantrecdesc^.branches[i].nestedvariant);
+                 SetLength(variantrecdesc^.branches[i].values,0);
+               end;
+             SetLength(variantrecdesc^.branches,0);
+             dispose(variantrecdesc);
+             variantrecdesc:=nil;
+           end;
+        end;
+
       begin
+         if assigned(variantrecdesc) then
+           free_variantrecdesc(variantrecdesc);
          if assigned(symtable) then
            begin
              symtable.free;