指针及Tlist问题?
   下面是我的程序代码,结果不正确,大家看看哪有问题?
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;type
  ptr=^intptr ; //ptr是intptr指针
  intptr=record
   name:string;
   state:integer;
   rights:integer;
end;  
type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Edit1: TEdit;
    Edit3: TEdit;
    Edit2: TEdit;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    list:Tlist;  //定义list
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
  ptr1:ptr ;   //定义用户指针,现在ptr1是intptr记录的指针
begin    //向list 中增加数据
   new(ptr1);
   ptr1^.name:=trim(edit1.text);
   ptr1^.state:=strtoint(edit2.text);
   ptr1^.rights:=strtoint(edit2.text);
   //ptr1^.rights:=12 ;
   List.Add(ptr1);
   dispose(ptr1);
end;
procedure TForm1.Button2Click(Sender: TObject);
 var
  Pintptr :ptr;
  i:integer;
  a:string ;
begin
for i := 0 to (List.Count-1) do  //循环显示list中的内容
begin
   Pintptr:=list.Items[i];
   ShowMessage(Pintptr.name);
   ShowMessage(inttostr(Pintptr.state));
   ShowMessage(inttostr(Pintptr.rights));
end;end;procedure TForm1.FormCreate(Sender: TObject);
begin
  list:=tlist.Create;
end;end.

解决方案 »

  1.   

    TList其实只是保存了一系列的指针而不是赋值
    你Dispose了TList所保存的指针所指的内容
    当然得不到正确结果了
      

  2.   

    yes...最後不用得時候 遍歷整個 list釋放裡面得指針所指向得內存。。
      

  3.   

    把  dispose(ptr1); 改为
    Free(ptr1);
      

  4.   

    不好意思错了这是我写的一段你可以看看!动态生成控件加到Tlist中procedure MyCreatListBox(I,MyTop : integer) ;
    var
      J,X : integer;
      MyCombx : TsuiComboBox;
    begin
      X := 5;
      for  J := 0 to I do
      begin
        MyCombx := TsuiComboBox.Create(nil);
        MyCombx.Parent := schfrm.sclbx;
        MyCombx.Left := X ;
        MyCombx.Top := MyTop ;
        if J mod 2 = 0 then
          MyCombx.Width := AWidth
        else
          MyCombx.Width := BWidth ;
        X := X + MyCombx.Width + 5;
        CBlist.Add(MyCombx);
      end;
    end;
      

  5.   

    Add了后Dispose?那不就没了
    所以只在Item不再使用的时候才Dispose的http://lysoft.7u7.net
      

  6.   

    知道了,是dispose的问题.
       再问一个问题!    
       Dispose(items[i])后,比如说list中有9个items,我把items[6]Dispose了,这个Tlist中还有几个items,我试了一下,好象还是9个items,不知道是如何重新排列的???