2013-04-12 6 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 (& 나사로) 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'이라는 또 다른 클래스의 private 멤버입니다. –

+0

그런 다음 우리가 뭘 잘못하고 있는지 추측하지 마십시오. 문제 행동을 나타내는 실제 코드를 게시하십시오. 클래스 정의를 사용하지 않고도 오류를 발생시키는 것은 의미가 없습니다. –

+0

그냥 전화 코드 –