function DecodeStrToStrLst(SourceStr: string): TStringList;
var
StrLst: TStringList;
TmpStr: string;
begin
StrLst := TStringList.Create;
while AnsiStrScan(PChar(SourceStr), ',') <> nil do
begin
TmpStr := LeftBStr(SourceStr, POS(',', SourceStr) - 1);
StrLst.Add(TmpStr);
SourceStr := RightBStr(SourceStr, Length(SourceStr) - POS(',', SourceStr));
end;
StrLst.Add(SourceStr);
Result := StrLst;
end;procedure TForm1.Button1Click(Sender: TObject);
var
Actors: TStringList;
i:integer;
begin
Actors := TStringList.Create;
try
lbActor.Clear;
if edit1.Text <> '' then
begin
Actors := DecodeStrToStrLst(edit1.Text);
for i := 0 to Actors.Count - 1 do
lbActor.AddItem(Actors.Strings[i], nil);
end;
finally
Actors.Free;
end;
end;
var
StrLst: TStringList;
TmpStr: string;
begin
StrLst := TStringList.Create;
while AnsiStrScan(PChar(SourceStr), ',') <> nil do
begin
TmpStr := LeftBStr(SourceStr, POS(',', SourceStr) - 1);
StrLst.Add(TmpStr);
SourceStr := RightBStr(SourceStr, Length(SourceStr) - POS(',', SourceStr));
end;
StrLst.Add(SourceStr);
Result := StrLst;
end;procedure TForm1.Button1Click(Sender: TObject);
var
Actors: TStringList;
i:integer;
begin
Actors := TStringList.Create;
try
lbActor.Clear;
if edit1.Text <> '' then
begin
Actors := DecodeStrToStrLst(edit1.Text);
for i := 0 to Actors.Count - 1 do
lbActor.AddItem(Actors.Strings[i], nil);
end;
finally
Actors.Free;
end;
end;
try
lbActor.Clear;
if edit1.Text <> '' then
begin
Actors := DecodeStrToStrLst(edit1.Text);
for i := 0 to Actors.Count - 1 do
lbActor.AddItem(Actors.Strings[i], nil);
end;
finally
Actors.Free;
end; 就这点代码就有问题,Actors已经创建了,DecodeStrToStrLst里又创建一个,很奇怪
procedure TForm1.Button1Click(Sender: TObject);
var
Actors: TStringList;
i:integer;
begin
//Actors := TStringList.Create; 该句有问题,有内存泄漏
try
lbActor.Clear;
if edit1.Text <> '' then
begin
Actors := DecodeStrToStrLst(edit1.Text);
for i := 0 to Actors.Count - 1 do
lbActor.AddItem(Actors.Strings[i], nil);
end;
finally
Actors.Free;
end;
end;
if not DecodeStrToStrLst(edit1.Text,lbActor) then exit;