![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Динамический массив как поле класса
Ornelius © (2007-04-28 00:43:00)у меня возникла проблема при инициализации динамичекого массива (поля класса) процедурой SetLength в конструкторе этого класса. Возникает ошибка распределени я памяти.
Вот мой код:
Type
TModel = class
private
Glass: array of real;
public
constructor Create(n:Integer);
end;
var model:TModel;
//=====================
implementation
constructor TModel.Create(n: Integer);
begin
SetLength(Self.Glass, n);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
model.Create(4); //<-вот здесь воникает ошибка.
//дело в том, что в этом месте указатель на экземпляр класса
//почему-то null. Те переменная model почему-то null.
//Видимо, проблема в этом
end;
ЗЫ: самое интересное: когда я не использовал встроенные динамические массивы, а работал напрямую с динамической памятью(процедуры типа GetMem) тоже возникла очень нетривиальная ошибка(как-то неправильно происходило присвоение по указателю). Мне сказали: "Пользуйся встроенными средствами для работы с динамической памятью"... И вот результат))
Ornelius (2007-04-28 01:14:00) [1]Спасибо. Туплю. Наверное, нужно не 100, а 300 раз наступить на одни и те же грабли, чтобы понять, что больше так делать не нужно))
Германн (2007-04-28 01:13:00) [2]
> model.Create(4); //<-вот здесь воникает ошибка.
> //дело в том, что в этом месте указатель на экземпляр класса
> //почему-то null. Те переменная model почему-то null.
> //Видимо, проблема в этом
А чему ты так удивляешься? Не понимаешь разницы между вызовом TModel.Create и model.Create? Книжки читай. Хэлп тоже поможет. Только "динамические массивы" тут уж точно не виноваты.
Servelat (2007-04-28 01:10:00) [3]Идти читать умные книги.
Экземпляры объектов создают так:
ObjInstance := TObjClass.Create();
Alx2 (2007-04-28 01:09:00) [4]> model.Create(4); //<-вот здесь воникает ошибка.
model := TModel .Create(4);