function createMemArea():pointer;
var
strList:TStringList;
begin
strList:=TStringList.Create;
strList.Add('1234');
getMem(result,sizeOf(strList));
move(strList,result,sizeOf(strList));
strList.Free;
end;procedure TForm1.Button6Click(Sender: TObject);
type
psl=^TStringList;
var
p:pointer;
begin
p:=createMemArea;
showMessage(psl(p)^.Strings[0]);
end;请问各位是什么原因呢?
var
strList:TStringList;
begin
strList:=TStringList.Create;
strList.Add('1234');
getMem(result,sizeOf(strList));
move(strList,result,sizeOf(strList));
strList.Free;
end;procedure TForm1.Button6Click(Sender: TObject);
type
psl=^TStringList;
var
p:pointer;
begin
p:=createMemArea;
showMessage(psl(p)^.Strings[0]);
end;请问各位是什么原因呢?
var
strList:TStringList;
begin
strList:=TStringList.Create;
strList.Add('1234');
getMem(result,sizeOf(strList));
move(strList,result^,sizeOf(strList)); //加一个^
// strList.Free; //不能释放
end;procedure TForm1.Button6Click(Sender: TObject);
type
psl=^TStringList;
var
p:pointer;
begin
p:=createMemArea;
showMessage(psl(p)^.Strings[0]);
end;
为何不能释放呢?我已经用move把strList的内存copy到新的内存区中去了呀。然后result返回的是新的内存区间的首地址。
你可以直接返回TStringList类型。
function CreateMemArea: TStrings;
begin
result := TStringList.Create;
result.Add('1234');
end;procedure TForm1.Button6Click(Sender: TObject);
var
S: TStrings;
begin
S := CreateMemArea;
showMessage(S.Strings[0]);
S.Free;
end;