无法在Lazarus中创建TStream

Ove*_*eth -1 pascal lazarus

它在这个简单的例子中失败了:

      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)

Mar*_*ynA 5

您使用的是错误的代码.它应该是

 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.