Q&A

  • access violation error 발생합니다. 도와주세요.
**************************Error Message*************************
Project p_bingo6.exe raised exception class EAccessViolation with message 'Access violation at address 004435B0 in module 'P_BINGO.EXE', Read of address 'FFFFFFFF',
Process stopped. Use Step or Run to continue.

프로그램 시작할때 발생하네요. ㅡ.ㅡ
CLASS 쓰는데에 약간 문제가 있어보이네요.
완전쵸보라 한번 막히니 해결할 길이 없슴당. 꼭 좀 도와주세용~~

*********SOURCE***********

type
  t = Array[1..25] of Integer;

  TPan = class
     A: t;
     c: Array[1..25] of Boolean;
     bet: integer;
     bingo, onetowin: Boolean;
     constructor CREATE;
  end;

  TForm1 = class(TForm)
    Button1: TButton;
        .
        .
    
    procedure Button1Click(Sender: TObject);
        .
        .

);

  private
    { Private declarations }
  public
    function price: integer;
    function random25(temparray: t): t;
    { Public declarations }
  end;

var
  Form1: TForm1;
  pan1, pan2, pan3, pan4, pan5, pan6 : TPan;
  B: t;
  numorder: integer;
  playing: boolean;
  credit: integer;

implementation

procedure TForm1.FormShow(Sender: TObject);
Begin
  credit:=40;
  newgame;
end;

procedure tform1.newgame;
begin
  initvar;
  pan1.CREATE;
  pan2.CREATE;
  pan3.CREATE;
  pan4.CREATE;
  pan5.CREATE;
  pan6.CREATE;
     .
     .


constructor Tpan.CREATE;
var
  i : integer;
begin
  bingo:=FALSE;   <------------------------이부분에 에러발생합니다.
  onetowin:=FALSE;
  bet:=0;
  For I:=1 to 25 do C[I]:=FALSE;
  For I:=1 to 25 do A[I]:= I;
  //For I:=1 to 25 do B[I]:= I;
end;
1  COMMENTS
  • Profile
    타락천사 2003.04.05 05:44
    안녕하세요. 타락임다..

    자신만의 코딩 규칙이 필요합니다.
    제 경우 많은 에러와 버그를 수정하며 얻은 저만의 버그와 에러를 피하는 코딩습관이 있습니다.

    님도 코딩 규칙을 만들어서 자연스럽게 몸에 배이게 해야 합니다.

    에러가 나는 원인은 생성되지 않은 인스턴스에 메모리를 핸들링하려고 해서 그렇습니다. 쉽게 말해서 클래스를 생성하지 않고, 클래스의 변수를 쓰려고 했습니다.

    Pan.Create ---> Pan := TPan.Create;

    수정하시면 됩니다.

    수고하세요..

    사족: 사실 이런 버그가 찾기 힘듭니다. 습관적으로 치기 때문에 오류가 없다고 믿어 버리거든요. 저두 가끔씩 헤메곤 하죠.. 하하..