0

私は非常に厳格なクラスを持っています。

unit StuffClass;

{$mode objfpc}{$H+}

interface

type
  TStuffClass = class
    public
      procedure Update;
  end;

implementation

procedure TStuffClass.Update;
begin

end;

end.

そのインスタンスを作成し、そのUpdateプロシージャを呼び出すと、プログラムは SIGSEGV..

なに..? まったく何もしていません。

Freepascal (および Lazarus) の 32 ビット バージョンを使用しています。

なぜこれを行うのですか?

編集:呼び出しビットは次のとおりです。

//Creating it
constructor TEngine.Create(TV: pSDL_Surface);
begin
  Self.TV := TV;
  Self.StuffClass.Create;
end;

function TEngine.Update: Boolean;
begin
  WriteLN('Test');
  SDL_PumpEvents;

  Self.StuffClass.Update; //Crashes here.
  Update := True;
end;
4

1 に答える 1

1

あなたはそれを間違って作成しています。

返されたオブジェクト インスタンスを変数に格納し、代わりにその変数 (参照) を使用する必要があります。

constructor TEngine.Create(TV: pSDL_Surface);
begin
  Self.TV := TV;
  Self.StuffClass := TStuffClass.Create;
end;

これで、コードの残りの部分でそれを使用できます。

procedure TEngine.SomeOtherProcedure;
begin
  Self.StuffClass.Update;
end;
于 2013-04-12T00:36:48.330 に答える