unit Unit1;
{---------------------------------------------------------------
/
/我的程序错在哪?点new,再点free,就出错!
/
----------------------------------------------------------------}interfaceuses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ComCtrls, Buttons;type
  TForm1 = class(TForm)
    new: TBitBtn;
    RichEdit1: TRichEdit;
    free: TBitBtn;
    Edit1: TEdit;
    Edit2: TEdit;
    ListView1: TListView;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure newClick(Sender: TObject);
    procedure freeClick(Sender: TObject);
  private
    { Private declarations }
    lsp:TList;
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);
begin
  lsp:=TList.Create;
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  lsp.Free;
end;procedure TForm1.newClick(Sender: TObject);
var
  pls:^TList;
begin
  pls:[email protected];
  lsp.Add(pls);
end;procedure TForm1.freeClick(Sender: TObject);
var
  pls:^TList;
begin
  if lsp.Count>0 then
  begin
    pls:=lsp.Items[0];
    lsp.Delete(0);
    pls^.Free;
  end;
end;end.

解决方案 »

  1.   

    unit Unit1;
    {---------------------------------------------------------------
    /
    /我的程序错在哪?点new,再点free,就出错!
    /
    ----------------------------------------------------------------}interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, ComCtrls, Buttons;type
      TForm1 = class(TForm)
        new: TBitBtn;
        RichEdit1: TRichEdit;
        free: TBitBtn;
        Edit1: TEdit;
        Edit2: TEdit;
        ListView1: TListView;
        procedure FormCreate(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure newClick(Sender: TObject);
        procedure freeClick(Sender: TObject);
      private
        { Private declarations }
        lsp:TList;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);
    begin
      lsp:=TList.Create;
    end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      lsp.Free;
    end;procedure TForm1.newClick(Sender: TObject);
    var
      pls:^TList;<---------它的作用域仅仅是在这里
    begin
      pls:[email protected];
      lsp.Add(pls);
    end;procedure TForm1.freeClick(Sender: TObject);
    var
      pls:^TList;<---------它的作用域仅仅是在这里
    begin
      //你没有创建就检测它的Count???!
      if lsp.Count>0 then
      begin
        pls:=lsp.Items[0];
        lsp.Delete(0);
        pls^.Free;
      end;
    end;//你把两个过程中的声明都去掉吧end.
    ===============================================================
         ◆◆◆ CSDN查询助手,查询方便快捷 ◆◆◆ 下载地址:  
     http://CoolSlob.ifood1.com/Download/CSDNFinder.exe  
     http://CoolSlob.8u8.com/Download/Tools/CSDNFinder.Slob[更名为.exe即可]  
      

  2.   

    兄台注意:
    pls<>lsp
    谢谢!!务请帮忙!
      

  3.   

    Coolslob()兄注意:
    pls<>lsp
    谢谢!!务请帮忙!
      

  4.   

    procedure TForm1.newClick(Sender: TObject);
    var
      pls:^TList;<---------它的作用域仅仅是在这里
    begin
    //pls的作用域开始
      pls:[email protected];<----------创建了
      lsp.Add(pls);
    //pls的作用域结束,到了这里,pls还是等于空!
    end;procedure TForm1.freeClick(Sender: TObject);
    var
      pls:^TList;<---------它的作用域仅仅是在这里
    begin
    //pls的作用域开始
    //这里,你创建了吗?呵呵:)
    //因为没有创建,所以你的lsp根本不存在!系统会报“地址”错误!
      if lsp.Count>0 then
      begin
        pls:=lsp.Items[0];
        lsp.Delete(0);
        pls^.Free;
      end;
    //pls的作用域结束
    end;//注意:作用域!!new与free中是两个不相同的变量,它们的创建与否不会相互影响!//建议:你把pls在private中声明,去掉new与free按钮中的声明!===============================================================
         ◆◆◆ CSDN查询助手,查询方便快捷 ◆◆◆ 下载地址:  
     http://CoolSlob.ifood1.com/Download/CSDNFinder.exe  
     http://CoolSlob.8u8.com/Download/Tools/CSDNFinder.Slob[更名为.exe即可]  
      

  5.   

    procedure TForm1.freeClick(Sender: TObject);
    var
      pls:^TList;
    begin
      if lsp.Count>0 then
      begin
        pls :=:[email protected];//加上这条试试
        pls:=lsp.Items[0];<--------pls没有创建!!!应该是执行到了这条就出错!!
        lsp.Delete(0);
        pls^.Free;
      end;
    end;
      

  6.   

    procedure TForm1.FormCreate(Sender: TObject);
    begin
      lsp:=TList.Create;<---lsp is created.
    end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      lsp.Free;<--lsp is free.
    end;procedure TForm1.newClick(Sender: TObject);
    var
      pls:^TList;
    begin
      pls:[email protected];
      lsp.Add(pls);<------lsp中增加一个地址值。
    end;procedure TForm1.freeClick(Sender: TObject);
    var
      pls:^TList;
    begin
      if lsp.Count>0 then
      begin
        pls:=lsp.Items[0];<--取出该值
        lsp.Delete(0);<--从lsp中删除
        pls^.Free;<----这一步出错了!!!
      end;
    end;end.
      

  7.   

    procedure TForm1.freeClick(Sender: TObject);
    var
      pls:^TList;---局域变量!
    begin
      //你没有创建就检测它的Count???!
       pls:[email protected];--加上这一句
      if lsp.Count>0 then
      begin
        pls:=lsp.Items[0];
        lsp.Delete(0);
        pls^.Free;
      end;
    end;
      

  8.   

    TO fyje兄:
    procedure TForm1.freeClick(Sender: TObject);
    var
      pls:^TList;---局域变量!
    begin
      //你没有创建就检测它的Count???!
       pls:[email protected];--加上这一句
      if lsp.Count>0 then
      begin
        pls:=lsp.Items[0];<----pls已赋值!!
        lsp.Delete(0);
        pls^.Free;<--出错了,但pls不为空!
      end;
    end;================================================================CSDN 论坛助手 Ver 1.0 B0402提供下载。 改进了很多,功能完备!★  浏览帖子速度极快![建议系统使用ie5.5以上]。 ★  多种帖子实现界面。 
    ★  保存帖子到本地[html格式]★  监视您关注帖子的回复更新。
    ★  可以直接发贴、回复帖子★  采用XML接口,可以一次性显示4页帖子,同时支持自定义每次显示帖子数量。可以浏览历史记录! 
    ★  支持在线检测程序升级情况,可及时获得程序更新的信息。★★ 签名  ●  
         可以在您的每个帖子的后面自动加上一个自己设计的签名哟。Http://www.ChinaOK.net/csdn/csdn.zip
    Http://www.ChinaOK.net/csdn/csdn.rar
    Http://www.ChinaOK.net/csdn/csdn.exe    [自解压]
      

  9.   

    procedure TForm1.freeClick(Sender: TObject);
    var
      pls:^TList;
    begin
      if lsp.Count>0 then
      begin
        pls :=:[email protected];//加上这条试试,如果还有错的话:)
        pls:=lsp.Items[0];<--取出该值
        lsp.Delete(0);<--从lsp中删除
        pls^.Free;<----这一步出错了!!!
      end;
    end;
      

  10.   

    呵呵
    有别人关注了,我就走开了:)要么你就别Free吧,反正超出值域它自己会Freegame over.
      

  11.   

    回coolslob兄:
    一样的错。
      

  12.   

    unit Unit1;
    {---------------------------------------------------------------
    /
    /我的程序错在哪?点new,再点free,就出错!
    /
    ----------------------------------------------------------------}interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, ComCtrls, Buttons;type
      TForm1 = class(TForm)
        new: TBitBtn;
        RichEdit1: TRichEdit;
        free: TBitBtn;
        Edit1: TEdit;
        Edit2: TEdit;
        ListView1: TListView;
        procedure FormCreate(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure newClick(Sender: TObject);
        procedure freeClick(Sender: TObject);
      private
        { Private declarations }
        lsp:TList;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);
    begin
      lsp:=TList.Create;
    end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      lsp.Free;
    end;procedure TForm1.newClick(Sender: TObject);
    var
      pls:TList;
    begin
      pls:=TList.Create;
      lsp.Add(pls);
    end;procedure TForm1.freeClick(Sender: TObject);
    var
      pls:TList;
    begin
      if lsp.Count>0 then
      begin
        pls:=lsp.Items[0];
        lsp.Delete(0);
        pls.Free;
      end;
    end;end.
      

  13.   

    to swjchina:
    为什么呢?为什么不能用指针?
      

  14.   

    呵呵:)
    想起来了,使用指针需要New,需要Dispose你New(pls)然后Dispose(pls)就好了===============================================================
         ◆◆◆ CSDN查询助手,查询方便快捷 ◆◆◆ 下载地址:  
     http://CoolSlob.ifood1.com/Download/CSDNFinder.exe  
     http://CoolSlob.8u8.com/Download/Tools/CSDNFinder.Slob[更名为.exe即可]  
      

  15.   

    呵呵:)
    想起来了,使用指针需要New,需要Dispose你New(pls)然后Dispose(pls)就好了===============================================================
         ◆◆◆ CSDN查询助手,查询方便快捷 ◆◆◆ 下载地址:  
     http://CoolSlob.ifood1.com/Download/CSDNFinder.exe  
     http://CoolSlob.8u8.com/Download/Tools/CSDNFinder.Slob[更名为.exe即可]  
      

  16.   

    to coolslob:
    我用过now dispose
    有错。to swjchina:
    你的程序调试通过。但有一个问题:
    我的程序如果是这样的:
    {new:在TServerSocket的OnClientConnect中}
    pls:=TList.Create;
    socket.data:=pls
    {free:在TServerSocket的OnClientDisConnect中}
    pls:=socket.data;//为什么这里不行?(调试不能通过)
    pls.free;谢谢!!!请帮忙!
      

  17.   

    {free:在TServerSocket的OnClientDisConnect中}
    pls:[email protected];//为什么这里不行?(调试不能通过)
    pls.free;
      

  18.   

    {free:在TServerSocket的OnClientDisConnect中}
    pls:[email protected];//为什么这里不行?(调试不能通过)
    pls.free;
      

  19.   

    谢谢各位,请zwjchina到1098827领余下的100分。
      

  20.   

    改为如下:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
        lsp:TList;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
      lsp := TList.Create;
    end;procedure TForm1.FormDestroy(Sender: TObject);
    begin
      lsp.Free;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      pls:TList;
    begin
      pls := TList.Create;
      lsp.Add(pls);
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
      pls:TList;
    begin
      pls := TList(lsp.Items[0]);
      lsp.Delete(0);
      pls.Free;
    end;end.
      

  21.   

    请zwjchina到1098827领余下的100分!
    主  题:  高手看过来!!!100分相送!!!! 
    作者:m_phoenix