指针及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.
下面是我的程序代码,结果不正确,大家看看哪有问题?
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.
你Dispose了TList所保存的指针所指的内容
当然得不到正确结果了
Free(ptr1);
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;
所以只在Item不再使用的时候才Dispose的http://lysoft.7u7.net
再问一个问题!
Dispose(items[i])后,比如说list中有9个items,我把items[6]Dispose了,这个Tlist中还有几个items,我试了一下,好象还是9个items,不知道是如何重新排列的???