delphi dll代码里面怎么安全的释放 泛型list?
eurekalog捕捉到内存泄露
在窗体创建的时候创建的list 释放判断不严密造成的
这里是结构体定义
type
pGamelist= ^TGamelist;//这里定义了指针
TGamelist =packed record
sky:Integer;
X: Single;
Y: Single;
Z: Single;
get:Boolean;
ss:string;
end;
implementation这个是创建
{$R *.dfm}
uses Generics.Collections;
var
List: TList<TGamelist>;//这里是定义的泛型数组
procedure TForm1.FormCreate(Sender: TObject);//创建list
begin
List := TList<TGamelist>.Create;
end;
这样会导致list无法被释放,比如之前被list.clear;
if list.count<>0 then
begin
list.free;
end;
直接这样会导致无效的指针
list.free;
procedure TForm1.FormDestroy(Sender: TObject);
var
I: Integer;
begin
// TForm1销毁时 销毁list
if Assigned(List) then
begin
for I := List.Count - 1 downto 0 do
begin
FreeMemory(list.Items[i]);
// FreeAndNil(list); 放到下面
end;
end;
FreeAndNil(list);
end;
这样,即便仅仅create,最后销毁也不会有漏网的
[code=delphi]
procedure?TForm1.FormCreate(Sender:?TObject);
var
??gl,?gl2:?pGamelist;
begin
??List?:=?TList?<?pGamelist?>?.Create;
??//gl?:=?GetMemory(SizeOf(TGamelist));
??//gl2?:=?GetMemory(SizeOf(TGamelist));
??//gl^.sky?:=?1000;
??//gl2^.sky?:=?2000;
??//List.Add(gl);?????//?添加两项
??//List.Add(gl2);
end;