Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.26;
Скачать: CL | DM;

Вниз

Помогите разобраться с AV   Найти похожие ветки 

 
аноним   (2006-02-24 19:22) [0]

Имею абсолютно не понятный мне AV в абсолютно понятном месте.

В общем есть следующая ситуация:

type
 TListClass= class
 private
   FVCList: TList;
   ...
 public
   ...
   function AddObject: TObjectClass ;
   ...
 end;

 TObjectClass = class
 private
   ...
   FPageItem: TSomeClass;
   ...
 public
   ...
   procedure Select;
   ...
 end;

function TListClass.AddObject: TObjectClass;
var
VC: TObjectClass;
begin
VC:=TObjectClass.Create(Self);
FVCList.Add(VC);
end;


все в порядке вещей, код привожу для понимания ситуации =)

procedure TObjectClass.Select;
var
Page: TSomeClass;
begin
...
Page:=FPageItem; // имеем AV...
...
end;


смотрим на каком же месте у нас AV:
mov eax, [eax+$18]

и этот АВ после создания экземпляра класса TObjectClass происходит при любом обращении (именно чтении) к его свойствам. я не понимаю в чем дело. уже не первый год программирую и чувствую себя идиотом. может пора вздремнуть...

где-то в затылок закралсь мысль что уж не виновата ли _локальная_ переменная в AddObject"e. но ведь не раз уже так делал. тут все пучком вроде. черт побери. повешусь! умоляю, помогите.


 
Джо ©   (2006-02-24 19:33) [1]

> procedure TObjectClass.Select;
> var
> Page: TSomeClass;
> begin
> ...
> Page:=FPageItem; // имеем AV...
> ...
> end;

Чует сердце, что экземпляр TObjectClass.Select на момент обращения к собственному полю не создан.


 
Джо ©   (2006-02-24 19:34) [2]

экземпляр TObjectClass, сорри.


 
Джо ©   (2006-02-24 19:35) [3]

Упс:
function TListClass.AddObject: TObjectClass;
var
 VC: TObjectClass;
begin
 VC:=TObjectClass.Create(Self);
 FVCList.Add(VC);
 Result := VC;
end;

Кто возвращать значение будет? ;)


 
аноним   (2006-02-24 19:37) [4]

понимаете в чем дело. он создан =)

procedure TfrmTEST.btnTESTClick(Sender: TObject);
var
VC: TObjectClass;
begin
VC:=VLST.AddObject;
VC.Select;
end;


вот где вызывается Select. VC<>nil. я не понимаю. я уже все перепроверил...


 
аноним   (2006-02-24 19:37) [5]

хахаха ))) черт побери!
спасибо! все, иду спать. идиот.


 
Джо ©   (2006-02-24 19:38) [6]

> [4] аноним   (24.02.06 19:37)
> понимаете в чем дело. он создан =)

Ты из функции значение возвратил?! В общем, см. [3].


 
Джо ©   (2006-02-24 19:39) [7]

И не лучше ли вообще без временной переменной, то есть так:
 Result := TObjectClass.Create (Self);
 FVCList.Add(VC);

или даже так:

 Result := TObjectClass (FVCList.Add(TObjectClass.Create(Self)))


 
Джо ©   (2006-02-24 19:39) [8]

> [7] Джо ©   (24.02.06 19:39)
> И не лучше ли вообще без временной переменной, то есть так:
>
> Result := TObjectClass.Create (Self);
> FVCList.Add(VC);

Тьху, сам не выспался. Вот так:

Result := TObjectClass.Create (Self);
FVCList.Add(Result);



Страницы: 1 вся ветка

Текущий архив: 2006.03.26;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.03 c
15-1141160102
sniknik
2006-02-28 23:55
2006.03.26
В тему. ;)


15-1141497250
ArtemESC
2006-03-04 21:34
2006.03.26
Получить текущую дату JavaScript?


15-1141196909
Ega23
2006-03-01 10:08
2006.03.26
Только что


2-1141724697
Der Nechk@ssoff
2006-03-07 12:44
2006.03.26
перемещение вверх и вниз


2-1142341927
kilop
2006-03-14 16:12
2006.03.26
Есть процедура приостановления работы программы, но ...