当我 运行 我的 pascal 程序出现访问冲突,如何解决? (免费帕斯卡)
Get Access violation when I run my pascal program, how to solve? (With free pascal)
这是PointClass.pas
{$mode objfpc} // Directive to be used for defining classes
{$m+} // Directive to be used for using constructor
UNIT PointClass ;
INTERFACE
TYPE Point = CLASS(TObject)
PRIVATE
x : INTEGER ;
y : INTEGER ;
PUBLIC
(* Setter *)
PROCEDURE setX (ix : INTEGER) ;
PROCEDURE setY (iy : INTEGER) ;
PROCEDURE setPoint (ix, iy : INTEGER) ;
(* Getter *)
FUNCTION getX : INTEGER ;
FUNCTION getY : INTEGER ;
END;
IMPLEMENTATION
USES Classes, SysUtils ;
PROCEDURE Point.setX (ix : INTEGER) ;
BEGIN
x := ix ; {line 26}
END ;
PROCEDURE Point.setY (iy : INTEGER) ;
BEGIN
y := iy ;
END ;
PROCEDURE Point.setPoint (ix, iy : INTEGER) ;
BEGIN
x := ix ;
y := iy ;
END ;
FUNCTION Point.getX : INTEGER ;
BEGIN
getX := x ;
END ;
FUNCTION Point.getY : INTEGER ;
BEGIN
getY := y ;
END ;
END.
和main.pas
PROGRAM TESTSHAPE ;
USES PointClass ;
VAR
p1 : Point ;
BEGIN
p1.Create ;
p1.setX (2) ; {line 9}
p1.setY (1) ;
WRITELN ('X is ', p1.getX, ' and Y is ', p1.getY) ;
p1.setPoint (23, 2) ;
WRITELN ('X is ', p1.getX, ' and Y is ', p1.getY) ;
END.
我用
编译
fpc -Tlinux -Criot -gl main.pas
这可以通过编译器,但是当我 运行 程序时,它说:
An unhandled exception occurred at [=14=]00000000422AC5 :
EAccessViolation : Access violation
[=14=]00000000422AC5 line 26 of PointClass.pas
[=14=]000000004001DA line 9 of main.pas
我很努力,也找了很多,还是没有解决这个问题。
(抱歉我的英语不好!)
我找到了。 main.pas 错误:
p1.Create ; {Wrong}
正确的行是:
p1 := Point.Create ;
这是PointClass.pas
{$mode objfpc} // Directive to be used for defining classes
{$m+} // Directive to be used for using constructor
UNIT PointClass ;
INTERFACE
TYPE Point = CLASS(TObject)
PRIVATE
x : INTEGER ;
y : INTEGER ;
PUBLIC
(* Setter *)
PROCEDURE setX (ix : INTEGER) ;
PROCEDURE setY (iy : INTEGER) ;
PROCEDURE setPoint (ix, iy : INTEGER) ;
(* Getter *)
FUNCTION getX : INTEGER ;
FUNCTION getY : INTEGER ;
END;
IMPLEMENTATION
USES Classes, SysUtils ;
PROCEDURE Point.setX (ix : INTEGER) ;
BEGIN
x := ix ; {line 26}
END ;
PROCEDURE Point.setY (iy : INTEGER) ;
BEGIN
y := iy ;
END ;
PROCEDURE Point.setPoint (ix, iy : INTEGER) ;
BEGIN
x := ix ;
y := iy ;
END ;
FUNCTION Point.getX : INTEGER ;
BEGIN
getX := x ;
END ;
FUNCTION Point.getY : INTEGER ;
BEGIN
getY := y ;
END ;
END.
和main.pas
PROGRAM TESTSHAPE ;
USES PointClass ;
VAR
p1 : Point ;
BEGIN
p1.Create ;
p1.setX (2) ; {line 9}
p1.setY (1) ;
WRITELN ('X is ', p1.getX, ' and Y is ', p1.getY) ;
p1.setPoint (23, 2) ;
WRITELN ('X is ', p1.getX, ' and Y is ', p1.getY) ;
END.
我用
编译fpc -Tlinux -Criot -gl main.pas
这可以通过编译器,但是当我 运行 程序时,它说:
An unhandled exception occurred at [=14=]00000000422AC5 :
EAccessViolation : Access violation
[=14=]00000000422AC5 line 26 of PointClass.pas
[=14=]000000004001DA line 9 of main.pas
我很努力,也找了很多,还是没有解决这个问题。
(抱歉我的英语不好!)
我找到了。 main.pas 错误:
p1.Create ; {Wrong}
正确的行是:
p1 := Point.Create ;