2013-04-12 20 views
0

我有一個非常鮮明的類。帕斯卡爾:在一個類上調用一個空方法segfaults

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; 

回答

1

你創建它錯了。

您需要返回的對象實例存儲到一個變量,然後使用該變量(參考),而不是:

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

現在你的代碼的其餘部分可以用它:

procedure TEngine.SomeOtherProcedure; 
begin 
    Self.StuffClass.Update; 
end; 
+0

其實,我正在那樣做。 StuffClass是另一個名爲Engine的類的私有成員。 –

+0

然後,不要讓我們試圖猜測你做錯了什麼。發佈展示問題行爲的實際代碼。沒有顯示你如何使用它導致錯誤的類定義是沒有意義的。 –

+0

剛剛發佈了調用代碼 –