[求助]为什么出现无效指针操作?

qufo 2007-07-09 10:47:04
在一个小程序中,我要从一份INI中载入一些数据,显示在窗口上,如下。

procedure TFrmMain.LoadINI;
var
fini:TINIFile
sl:TStrings;
i:Integer;
begin
//
fini:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'MYPro.INI');

//载入打印机列表
sl:=TStrings.Create;
sl:=Printer.Printers;
cbCKPrinter.Items.Clear;
cbFPPrinter.Items.Clear;
for I := 0 to sl.Count - 1 do
begin
cb1.Items.Add(sl[i]);
cb2.Items.Add(sl[i]);
end;
sl.Free;

//设定默认打印机
cb1.ItemIndex:=fini.ReadInteger('PRINTERSELECT','CKINDEX',0);
cb2.ItemIndex:=fini.ReadInteger('PRINTERSELECT','FPINDEX',0);

//
edt1.Text:=fini.ReadString('NO','FPNO','0');
fini.Free;
end;


我把此段代码放在 Form 的 Create 处,结果在关闭窗口时出现错误。
invalid pointer operation

按说 sl 我也释放了,fini我也释放了,为什么还出现无效指针操作?
窗口的 Close 事件没写任何东西。
...全文
641 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qufo 2007-07-09
  • 打赏
  • 举报
回复
谢谢楼上几位。
logne 2007-07-09
  • 打赏
  • 举报
回复
sl:=Printer.Printers,sl已经指向Printer里东西了,这个是系统创建的,你执行sl.free给释放掉,然后关闭窗体是,系统又释放了一次,就出错了~
阿发伯 2007-07-09
  • 打赏
  • 举报
回复
下面2句是毫无意义的2句,应该删掉。而且sl:=Printer.Printers;后,sl已经不是以前Create的地址,所以sl.Free会出错

sl:=TStrings.Create;
sl.Free;
brightyang 2007-07-09
  • 打赏
  • 举报
回复
呵呵,见鬼了,应该就是不会

16,749

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧