External: SIGSEGV

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

External: SIGSEGV

Сообщение trexxet » 25.03.2013 23:17:35

Здравствуйте, товарищи.
После долгого баловства с гридами решил заняться графикой и написать простенькую игру. Но обломился на первой же минуте.
Создал игровое поле, вот его код:
Код: Выделить всё
unit field;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics;

type TField = class
  var xnum, ynum, cellsize: integer;  //Количество столбцов, количество строк, размер клетки в пикселях
  constructor Create(cxnum, cynum, ccellsize: integer);
end;

var
  GField: TField;  //Собственно поле

implementation

constructor TField.Create(cxnum, cynum, ccellsize: integer);
begin
  xnum:=cxnum;
  ynum:=cynum;
  cellsize:=ccellsize;
end;

end.

В основную форму налепил кнопку, по которой в соответствии с полем рисуется сетка
Код: Выделить всё
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  field;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;
  i: integer;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
  GField.Create(10, 10, 50);
  //i:=GField.xnum;
  for i:=1 to GField.ynum do Form1.Canvas.Line(0, GField.cellsize*i, GField.xnum*GField.cellsize, GField.cellsize*i);
  for i:=1 to GField.xnum do Form1.Canvas.Line(GField.cellsize*i, 0, GField.cellsize*i, GField.xnum*GField.cellsize);
end;

end.

При обращении к любому параметру GField вылезает ошибка External: SIGSEGV. Раньше она у меня вылезала при выходе за границу массива, но сейчас, проверив строкой i:=GField.xnum и наблюдением за переменной, убедился, что она вылезает потому что GField просто не создается.
Помогите, пожалуйста, это исправить. Буду очень благодарен.
trexxet
новенький
 
Сообщения: 31
Зарегистрирован: 25.03.2013 22:58:00
Откуда: Смоленск

Re: External: SIGSEGV

Сообщение VirusFree » 26.03.2013 01:09:39

исправь
GField.Create(10, 10, 50);
на
GField := TField.Create(10, 10, 50);
VirusFree
новенький
 
Сообщения: 11
Зарегистрирован: 22.07.2011 03:11:56


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 221

Рейтинг@Mail.ru
cron