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