jpf*_*ius 3 delphi file-io memory-management
下面的代码抛出一个 EZDecompressionError 和消息“无效的 ZStream 操作”
Reader.Free
Run Code Online (Sandbox Code Playgroud)
被执行。有人能告诉我这段代码有什么问题吗?
Reader := nil;
Decompressor := nil;
InputFile := TFileStream (FileName, fmOpenRead);
try
Decompressor := TDecompressionStream.Create (InputFile);
Reader := TReader.Create (Decompressor, 1024);
SomeString := Reader.ReadString;
finally
Reader.Free
Decompressor.Free;
InputFile.Free;
end;
Run Code Online (Sandbox Code Playgroud)
我测试了更改内存释放命令的顺序,但这似乎没有帮助。省略 Reader.Free 行当然会导致内存泄漏。
粉碎机
TReader在其析构函数中执行FStream.Seek(FBufPos - FBufCount, soCurrent)。
由于向后搜索而引发错误。如果在释放读取器之前调用Reader.FlushBuffer和Reader.Position := soFromBeginning,错误会消失吗?
来自 TDecompressionstream 的评论。TDecompressionStream 是只读和单向的;你可以在溪流中向前寻找,但不能向后寻找。
问候, 利
文
| 归档时间: |
|
| 查看次数: |
303 次 |
| 最近记录: |