SIGSEGV при использовании TTIPropertyGrid

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

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

Ответить
Аватара пользователя
Azeroth
новенький
Сообщения: 14
Зарегистрирован: 13.05.2009 14:28:53

SIGSEGV при использовании TTIPropertyGrid

Сообщение Azeroth »

прошу помощи, у меня вылезла ошибка SIGSEGV в следующем случае:
вот такой класс я хочу показать в TIPropertyGrid:

Код: Выделить всё

tbaselist=class(tpersistent)
  private
    arr:array of string;
   public
    constructor create(len:integer);
    procedure load(s:string);
   published
   property f1:string read arr[0] write arr[0];
   property f2:string read arr[1] write arr[1];
   property f3:string read arr[2] write arr[2];
   property f4:string read arr[3] write arr[3];
  end; 

...
в коде есть присвоение

Код: Выделить всё

 rec1:=tbaselist.Create(4); // длинна потом уберётся
TIPropertyGrid1.TIObject:=rec1; // вот это выбрасывает исключение
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

А массив arr вы инициализируете?
Аватара пользователя
Azeroth
новенький
Сообщения: 14
Зарегистрирован: 13.05.2009 14:28:53

Сообщение Azeroth »

конечно, setlength делаю, вроде бы это должно работать

Добавлено спустя 50 минут 37 секунд:
мои попытки привели меня к ещё следующему неработающему коду,

Код: Выделить всё

  tarr=array[0..5] of string;
  parr=^tarr;

var arr:parr;
begin
 getmem(arr,4* sizeof(string));
 showmessage(inttostr(4* sizeof(string))); // 16- на 4 элемента
 arr^[0]:='1'; // первый
 showmessage(arr^[0]);
 arr^[1]:='2'; // второй
 showmessage(inttostr(@(arr^[1])-(@arr[0]))); //4 - как и должно быть
 showmessage(arr^[1]);
 arr^[2]:='3'; //  вот здесь опять sigsegv, хотя это только третий
showmessage(arr^[2]);
freemem(arr);
end;     

может кто проверит у себя, это, а то я начинаю думать что у меня что-то не то с fpc
я был бы очень благодарен за помощь.
Ответить