Форум: "Основная";
Текущий архив: 2006.03.26;
Скачать: [xml.tar.bz2];
ВнизПомогите разобраться с 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.046 c