TStream怎么释放不掉啊!请帮忙看看好吗??(50分)

  • 主题发起人 主题发起人 terminal_guo
  • 开始时间 开始时间
T

terminal_guo

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure aa;
var
F: TStream;
Str: String;
begin
F := TFileStream.Create(FileName,fmOpenRead);
if F <> nil then
begin
F.Read(Str, F.Size);
F.Free;
end;
end;
在F.Free的时候就抱系统地址错误了,有哪位大虾知道是什么原因啊,望告之解决方法,谢谢了!
 
首先,不要从stream中读取string类型的数据,可以改为pchar;
其次,流创建后不需要判断NIL,一般用一个错误结构包括起来。

procedure aa;
var
F: TStream;
Str:pchar;
begin
F := TFileStream.Create(FileName,fmOpenRead);
try
str:=allocmem(F.Size);
F.Read(Str^, F.Size);

do something

freemem(str);
finally
f.free;
end;
end;
 
谢谢了,我先去试一下!!
 
在使用str之前先调用Setlength
procedure aa;
var
F: TStream;
str : string;
begin
F := TFileStream.Create(FileName,fmOpenRead);
try
SetLength(str,F.Size);
F.read(str[1], F.size);
finally
F.Free;
end;
end;
 
同意楼上的观点
 
多人接受答案了。
 

Similar threads

后退
顶部