- Код: Выделить всё
- 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. Пробовал на двух компах, в том числе и свежеустановленный.




