- Код: Выделить всё
tparent=object
end;
tchild=object(tparent)
i:integer;
constructor init;
end;
var Form1: TForm1;
implementation { TForm1 } {$R *.lfm}
procedure TForm1.Button1Click(Sender: TObject);
var x:tchild;
begin
x.init;
showmessage(inttostr(x.i));
end;
constructor tchild.init;
begin
i:=10;
end;
По идее, тут никакой ошибки нет, программа компилируется, выполняется и показывает сообщение showmessage.
Но при отладке, если точка останова находится на строке x.init или showmessage(inttostr(x.i)); то при останове возникает такая ошибка -
"gdb.exe - ошибка приложения. Инструкция по адресу 0x77c37740 обратилась к памяти по адресу "0x0000000000". Память не может быть read."
Подробности в следующем окне "ошибка отладчика" показывают -
"Команда GDB:
"-stack-list-locals 1"
не возвратила никакого результата.
Процесс GDB больше не выполняется."
2. Если есть перегруженный оператор присваивания для обьекта (результат - целое число), то будет возникать ошибка, если этот результат непосредственно подставить в индекс массива, например -
- Код: Выделить всё
tobj=object
end;
var Form1: TForm1;
operator :=(cc:tobj)r:integer;
implementation { TForm1 } {$R *.lfm}
operator :=(cc:tobj)r:integer;
begin
r:=0;
end;
procedure TForm1.Button2Click(Sender: TObject);
var x:array of integer;
cc:tobj;
begin
showmessage(inttostr(cc)); //ОК, появляется сообщение и показывает ноль
setlength(x,1);
x[cc]:=10; //ошибка - "Проект вызвал класс иключения 'External: SIGSEGV'"
end;
ошибка "Проект вызвал класс исключения 'External: SIGSEGV'" в строке x[cc]:=10; возникает при пошаговом выполнении, при работе программы ошибка "Access violation"
Это глюки у Лазаруса или я что-то делаю не так?
Лазарус 1.0.4, winXP. Пробовал на двух компах, в том числе и свежеустановленный.