无法在 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;

等等...