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.
{---------------------------------------------------------------
/
/我的程序错在哪?点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.
{---------------------------------------------------------------
/
/我的程序错在哪?点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即可]
pls<>lsp
谢谢!!务请帮忙!
pls<>lsp
谢谢!!务请帮忙!
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即可]
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;
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.
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;
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 [自解压]
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;
有别人关注了,我就走开了:)要么你就别Free吧,反正超出值域它自己会Freegame over.
一样的错。
{---------------------------------------------------------------
/
/我的程序错在哪?点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.
为什么呢?为什么不能用指针?
想起来了,使用指针需要New,需要Dispose你New(pls)然后Dispose(pls)就好了===============================================================
◆◆◆ CSDN查询助手,查询方便快捷 ◆◆◆ 下载地址:
http://CoolSlob.ifood1.com/Download/CSDNFinder.exe
http://CoolSlob.8u8.com/Download/Tools/CSDNFinder.Slob[更名为.exe即可]
想起来了,使用指针需要New,需要Dispose你New(pls)然后Dispose(pls)就好了===============================================================
◆◆◆ CSDN查询助手,查询方便快捷 ◆◆◆ 下载地址:
http://CoolSlob.ifood1.com/Download/CSDNFinder.exe
http://CoolSlob.8u8.com/Download/Tools/CSDNFinder.Slob[更名为.exe即可]
我用过now dispose
有错。to swjchina:
你的程序调试通过。但有一个问题:
我的程序如果是这样的:
{new:在TServerSocket的OnClientConnect中}
pls:=TList.Create;
socket.data:=pls
{free:在TServerSocket的OnClientDisConnect中}
pls:=socket.data;//为什么这里不行?(调试不能通过)
pls.free;谢谢!!!请帮忙!
pls:[email protected];//为什么这里不行?(调试不能通过)
pls.free;
pls:[email protected];//为什么这里不行?(调试不能通过)
pls.free;
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.
主 题: 高手看过来!!!100分相送!!!!
作者:m_phoenix