PFuncInfo=^TFuncInfo
TFuncInfo=record
DispName: string;
Level: Integer;
end;
var
mFuncList: TStringList;//全局变量
代码大概如下:
procedure Init;
var
FuncInfo: PFuncInfo;
i: Integer;
begin
for i := 0 to sTempList.Count - 1 do
begin
New(FuncInfo);
with FuncInfo^ do
begin
DispName := sTempList.Strings[i];
Level := i;
mFuncList.AddObject(DispName, TObject(@FuncInfo));
end;
end;
end;
然后我在释放的时候如下:
procedure FreeFuncInfo;
var
i: Integer;
FuncInfo: PFuncInfo;
begin
if mFuncList <> nil then
begin
for i := 0 to mFuncList.Count - 1 do
begin
FuncInfo := PFuncInfo(mFuncList.Objects[i]);
if FuncInfo <> nil then
Dispose(FuncInfo);//此行出错,请教原因
end;
end;
end; 以上到底是怎么错了呢?谢谢!
TFuncInfo=record
DispName: string;
Level: Integer;
end;
var
mFuncList: TStringList;//全局变量
代码大概如下:
procedure Init;
var
FuncInfo: PFuncInfo;
i: Integer;
begin
for i := 0 to sTempList.Count - 1 do
begin
New(FuncInfo);
with FuncInfo^ do
begin
DispName := sTempList.Strings[i];
Level := i;
mFuncList.AddObject(DispName, TObject(@FuncInfo));
end;
end;
end;
然后我在释放的时候如下:
procedure FreeFuncInfo;
var
i: Integer;
FuncInfo: PFuncInfo;
begin
if mFuncList <> nil then
begin
for i := 0 to mFuncList.Count - 1 do
begin
FuncInfo := PFuncInfo(mFuncList.Objects[i]);
if FuncInfo <> nil then
Dispose(FuncInfo);//此行出错,请教原因
end;
end;
end; 以上到底是怎么错了呢?谢谢!
for i := mFuncList.Count - 1 downto 0 do
mFuncList.Clear
mFuncList.AddObject(DispName, TObject(@FuncInfo));procedure FreeFuncInfo;
var
i: Integer;
FuncInfo: PFuncInfo;
begin
if mFuncList <> nil then
begin
for i := 0 to mFuncList.count-1 do
begin
if Assigned(PFuncInfo(mFuncList.Objects[i]) then begin
Dispose(PFuncInfo(mFuncList.Objects[i]);
end;
end;
end;
mFuncList.AddObject(DispName, TObject(@FuncInfo)); 仅仅是为了存放一个记录类型的指针
方便以后调用这样写有问题吗?
>>
mFuncList.AddObject(DispName, TObject(FuncInfo));
已经是指针了,不要再取地址
mFuncList.AddObject(DispName, TObject(@FuncInfo));
增加的是一个指向指针的指针,对应的释放方法是
PFuncInfo(Pointer(mFuncList.Objects[i])^);
直接用:
mFuncList.AddObject(DispName, TObject(FuncInfo));
释放的时候:
FuncInfo := PFuncInfo(mFuncList.Objects[i]);
if FuncInfo <> nil then
begin
Dispose(FuncInfo);
end;但是用
mFuncList.AddObject(DispName, TObject(@FuncInfo));
释放的时候用
FuncInfo := PFuncInfo(Pointer(mFuncList.Objects[i])^);
Dispose(FuncInfo);
还是会报错啊,请教ysai或者其他朋友这是怎么解释呢?谢谢!