Главная страница
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.048 c
15-1141469577
MadAngel
2006-03-04 13:52
2006.03.26
Помогите починить ноут


15-1140695079
VID
2006-02-23 14:44
2006.03.26
Звуки природы откуда достать ?


15-1141385510
MU
2006-03-03 14:31
2006.03.26
Загадка. (извините, если она уже была)


2-1142183531
Din
2006-03-12 20:12
2006.03.26
Как удалить и скопировать файлы по маске?


4-1135930291
oleggar
2005-12-30 11:11
2006.03.26
в чем я не прав ?о хуках