Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ Дин. память в объекте

Автор: Baumanec 9.05.2008 4:28

Имеется следующая проблема, уже целый день с ней мучаюсь, имеется объект который в своём конструкторе выделяет память "голове и хвосту" списка, с которым собственно и работает объект ("голова и хвост" описаны в привэйт), но при вызове в событии создания формы вылетает ошибка, что делать? И как с этим бороться и какие фундаментальные причины произошедшего?

Добавлено через 2 мин.
Выдаёт ошибку как будто не может выделить память под типизированные указатели....

Автор: volvo 9.05.2008 4:46

Конструктор вызывается не "в стиле Паскаля", случайно?

var obj: TObject;
...
Obj.Create(...); // <--- Так делать не надо
Obj := TObject.Create(...); // <--- Вот так надо
Если так и делаешь, и все равно ошибка - то показывай код, телепаты в отпуске...

Автор: Baumanec 9.05.2008 18:02

Вот значит объявление класса:

Код

Type
  tM=array [1..nm] of integer;
  TStekff = class (TObject)
    private
      fz:tm;
      Fi:integer;
    public
      constructor Create;
      Function pop(out n:integer):boolean;
      Function push(const n:integer):boolean;
      Property i:integer Read fi write fi;
    end;

Вот его конструктор:
Код

constructor TStekff.Create;
begin
fi:=0;
end;

А вот так я его вызываю, хотя сначала да я его вызывал в стиле Паскаля...
Код

procedure TForm2.FormCreate(Sender: TObject);
begin
s1:=S1.Create;
s2:=s2.Create;
end;

Но всё равно не пашет, я даже убрал список и тупо использовал статический массив, всё равно выдаёт EAccessViolation, внутри конструктора класса...
У меня тупое предположение, может всё дело в моём дэльфи 2006?

Автор: volvo 9.05.2008 19:11

Цитата
А вот так я его вызываю
А вот так вызывать не пробовал:
procedure TForm2.FormCreate(Sender: TObject);
begin
s1 := TStekff.Create;
s2 := TStekff.Create;
end;
?

Неужели из моего предыдущего поста не видно, что перед точкой должен стоять Тип, а не экземпляр типа (к тому же НЕинициализированный)?

Автор: Baumanec 9.05.2008 19:28

Да, было видно, спасибо...