Главная страница
    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.038 c
1-1140544055
Alextp
2006-02-21 20:47
2006.03.26
Заменитель System.AssignFile для юникодных имен


5-1127236041
rds
2005-09-20 21:07
2006.03.26
Как вызвать событие


9-1126683287
Ricks
2005-09-14 11:34
2006.03.26
Пересечение прямоугольников


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


15-1141390499
NightLord
2006-03-03 15:54
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский