Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.043 c
6-1134645753
Plastic Angel
2005-12-15 14:22
2006.03.26
Indy in Depth....?


1-1140640342
Grief
2006-02-22 23:32
2006.03.26
Список библиотек процесса


2-1141731659
LostHero
2006-03-07 14:40
2006.03.26
Загрузка картинок


2-1141915164
dest81
2006-03-09 17:39
2006.03.26
BDE


15-1141160102
sniknik
2006-02-28 23:55
2006.03.26
В тему. ;)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский