无法在Lazarus中创建TStream

时间:2017-03-27 13:22:44

标签: pascal 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

2 个答案:

答案 0 :(得分:5)

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

 procedure TForm1.Button1Click(Sender: TObject);
      var
        ts: TStream;
      begin
        ts := TStream.Create; //  If Lazarus supports  creation of Stream instances.
        ts.Free;
      end;

在创建之前,您的变量ts只包含之前使用堆栈的垃圾。您必须调用类的构造函数来在堆上分配实际对象,并将ts变量指向它。

如果Lazarus抱怨它无法创建TStream的实例(它可能会将其视为一个抽象类而我在这台机器上没有Lazarus来检查),请尝试这样的事情:

 var
    ts: TMemoryStream;
  begin
    ts := TMemoryStream.Create; 
    ts.Free;
  end;

您可以使用任何其他具体的TStream-descendant类而不是TMemoryStream。

答案 1 :(得分:0)

原本是在尝试这段代码:

memStream.Create;

但它应该是:

memStream := TMemoryStream.Create;

等等...