它在这个简单的例子中失败了:
procedure TForm1.Button1Click(Sender: TObject);
var
ts: TStream;
begin
ts.Create; //<---- fails here
ts.Free;
end;
Run Code Online (Sandbox Code Playgroud)
有错误:
Project project1 raised exception class 'External: SIGSEGV'.
At address 10000DB38
Run Code Online (Sandbox Code Playgroud)
您使用的是错误的代码.它应该是
procedure TForm1.Button1Click(Sender: TObject);
var
ts: TStream;
begin
ts := TStream.Create; // If Lazarus supports creation of Stream instances.
ts.Free;
end;
Run Code Online (Sandbox Code Playgroud)
在创建之前,您的变量ts只包含之前使用堆栈的垃圾.您必须调用类的构造函数来在堆上分配实际对象并将ts变量指向它.
如果Lazarus抱怨它无法创建TStream的实例(它可能会将它视为一个抽象类而我在这台机器上没有Lazarus来检查),请尝试这样的事情:
var
ts: TMemoryStream;
begin
ts := TMemoryStream.Create;
ts.Free;
end;
Run Code Online (Sandbox Code Playgroud)
您可以使用任何其他具体的TStream-descendant类,而不是TMemoryStream.
| 归档时间: |
|
| 查看次数: |
176 次 |
| 最近记录: |