为提取原先存入Tlist内容而手动分配的结构体在用完后怎么一释放就出错~~

shuilehaojiucaixing 2009-02-11 03:49:54
type
TSysLog = record
Date: string[20];//TDateTime;
Name: string[20];
Part: string[20];
Status: string[20]
end;
PSysLog = ^TSysLog;
var
List:TList;
Form1: TForm1;
implementation

{$R *.dfm}
procedure TForm1.Button4Click(Sender: TObject);
var
p:TSysLog;
i:Integer;
T:TDateTime;
begin
List:=TList.Create;
i:=0;
button4.Enabled:=False;
while i<100 do
begin
T:=now;
p.Date:=DateToStr(T);
p.Name:='sdfsd';
p.Part:='dfsf';
p.Status:='OK';
List.Add(@p);
inc(i);
end;
button4.Enabled:=True;
end;

procedure TForm1.Button5Click(Sender: TObject);
var
p:PSysLog;
i:Integer;
begin
button5.Enabled:=False;
i:=0;
new(p);
while i<List.Count do
begin
p:=List.Items[i];
inc(i);
end;
Dispose(p);////各位大虾们,这里对应new的p怎么还释放不了,一释放就出错
button5.Enabled:=True;
end;

end.
//////////////////////
...全文
91 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
Tlist在保存时只需而且只能new不可dispose,否则就保存不了信息。
谢谢3楼
  • 打赏
  • 举报
回复
procedure TForm1.Button5Click(Sender: TObject); 
var
p:PSysLog;
i:Integer;
s:string;
begin
button5.Enabled:=False;
i:=0;
new(p);
while i <List.Count do
begin
p:=List.Items[i];
//showmessage(p.Date+p.Part+p.Name+p.Status);
NOTE.Lines.Add(p.Date+p.Part+p.Name+p.Status);//把这句代码注释后无错,但是这样直接运行会有内存操作错误
inc(i);
end;
Dispose(p);
button5.Enabled:=True;
end;
  • 打赏
  • 举报
回复
能正确存储格式了

procedure TForm1.Button4Click(Sender: TObject);
var
p:PSysLog;
i:Integer;
T:TDateTime;
begin
i:=0;
button4.Enabled:=False;
while i<10 do
begin
new(p);
T:=now;
p.Date:=DateToStr(T);
p.Name:='sdfsd';
p.Part:='dfsf';
p.Status:='OK';
List.Add(p);
inc(i);
end;
dispose(p);
button4.Enabled:=True;
end;

procedure TForm1.Button5Click(Sender: TObject);
var
p:PSysLog;
i:Integer;
s:string;
begin
button5.Enabled:=False;
i:=0;
new(p);
while i<List.Count do
begin
p:=List.Items[i];
//showmessage(p.Date+p.Part+p.Name+p.Status);
NOTE.Lines.Add(p.Date+p.Part+p.Name+p.Status);//把这句代码注释后无错,但是这样直接运行会有内存操作错误
inc(i);
end;
Dispose(p);
button5.Enabled:=True;
end;
xanadu roughage 2009-02-11
  • 打赏
  • 举报
回复
楼主,建议你先看一下这篇文章吧:
http://flash.blog.51cto.com/374778/74952
liangpei2008 2009-02-11
  • 打赏
  • 举报
回复

procedure TForm1.btn1Click(Sender: TObject);
var
p:PSysLog;
i:Integer;
T:TDateTime;
begin

i:=0;
List:=TList.Create;
while i <100 do
begin
new(p);
T:=now;
p.Date:=DateToStr(T);
p.Name:='sdfsd';
p.Part:='dfsf';
p.Status:='OK';
List.Add(p);
inc(i);
end;

end;
  • 打赏
  • 举报
回复
刚刚加了showmessage进去发现P根本就没获取到内容···怎么回事
procedure TForm1.Button5Click(Sender: TObject);
var
p:PSysLog;
i:Integer;
s:string;
begin
button5.Enabled:=False;
i:=0;
new(p);
while i <List.Count do
begin
p:=List.Items[i];
showmessage(p.Date+p.Part+p.Name+p.Status);//这里show出来的是空的,查看内存是#0#0#0,晕
inc(i);
end;
Dispose(p);////各位大虾们,这里对应new的p怎么还释放不了,一释放就出错
button5.Enabled:=True;
end;
xanadu roughage 2009-02-11
  • 打赏
  • 举报
回复
直接p := nil;
就可以了啊!

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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