Access violation at....(30分)

  • 主题发起人 主题发起人 赖凤松
  • 开始时间 开始时间

赖凤松

Unregistered / Unconfirmed
GUEST, unregistred user!
我的程序中有这样的语句:
Var FieldsThisTime:TStrings

.........

If FieldsThisTime<>Nil then
FieldsThisTime.Destory;

这个语句不只一次运行,有时会出现
Access violation...at ...
的错误,这是为什么?
 
If FieldsThisTime<>Nil then
begin
FieldsThisTime.Free;
FieldsThisTime:=nil;
end;
 
var list2:tstrings;
begin
list2:=tstrings.Create;
....
list2.Free;
end;
 
To 沈前卫:
依您说的这样做,还是会出现这样的问题!

既然是在非nil的条件下进行free(destroy),又为什么还会
Access violation...的错误?望指教!
 
TStrings用TStringlist来创建:
var
FieldsThisTime: TStrings;
begin
FieldsThisTime := TStringList.Create
........
用free(destroy)方法后,指针指向的内存区域被释放,但是
指针仍然指向那块内存区域,再调用方法就会出错,要置为Null!
 
向这种程序,是不是可以使用这样写:

Var FieldsThisTime:TStrings

Begin
FieldsThisTime:=TStrings.Create;
Try
...
finally
FieldsThisTime.Free;
End;
End;

这样,无论如何,每次使用后都可以保证释放内存,当然如果过于频繁
的内存释放操作,应尽量重复使用FieldsThisTime变量,使用完成后最
后一次释放。
例如:
Var FieldsThisTime:TStrings

Begin
FieldsThisTime:=TStrings.Create;
Try
//第一次使用
FieldsThisTime....
//消除第一次使用的影响
FieldsThisTime.Clear

//第二次使用
...
finally
FieldsThisTime.Free;
End;
End;
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
835
SUNSTONE的Delphi笔记
S
S
回复
0
查看
765
SUNSTONE的Delphi笔记
S
后退
顶部