在这个简单的例子中失败了:
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
答案 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;
等等...