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

Вниз

Почему не работает код?   Найти похожие ветки 

 
Пубертанец   (2003-06-30 09:37) [0]

Есть такой код:

TPerson = class
private
FId: integer;
public
constructor Create;
destructor Destroy; override;
property ID: integer read FId;
end;
//************************************
TDoc = class
private
FId: integer;
FPerson: TPerson;
public
constructor Create;
destructor Destroy; override;
property ID: integer read FId;
property Person: TPerson read FPerson write FPerson;
end;

constructor TDoc.Create;
begin
inherited Create;
FPerson:=TPerson.Create;
end;

destructor TDoc.Destroy;
begin
if FPerson<>nil then FPerson.Free;
inherited Destroy;
end;
//************************************

procedure TForm1.Button1Click(Sender: TObject);
var Person: TPerson;
Doc: TDoc;
begin
Person:=TPErson.Create;
Doc:=TDoc.Create;
Doc.Person:=Person;
Person.Free;
Doc.Free;
end;

Вот на Doc.Free вываливается с ошибкой Access violation. Как быть?


 
Palladin ©   (2003-06-30 09:41) [1]

Свойство организовано не совсем правильно, вместо того что бы делать копию (приравнивать поля, использовать Assign) переданого объекта TPerson, ты всего лишь приравниваешь ссылку. А потом пытаешься освободить уже освобожденный. Естественно будет возникать ошибка.


 
Anatoly Podgoretsky ©   (2003-06-30 09:41) [2]

Дважды освобождаешь Person


 
Пубертанец   (2003-06-30 09:54) [3]

Спасибо большое. Хула мне за такое упущение в моем образовании.


 
Юрий Зотов ©   (2003-06-30 12:10) [4]

> Пубертанец (30.06.03 09:37)

Еще один момент. Ваши классы - прямые наследники TObject. Но в данном случае TPerson может потребовать введения метода Assign, а тогда было бы логичнее унаследовать его от TPersistent. Это не обязательно, но соответствовало бы идеологии построения VCL. И избавило бы от возможных дальнейших проблем.



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

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

Наверх




Память: 0.47 MB
Время: 0.023 c
1-44678
BOA_KAA
2003-06-30 13:31
2003.07.14
TDriveComboBox


3-44613
Fants
2003-06-21 15:47
2003.07.14
РАСПРОСТРАНЕНИЕ и INTERBASE


1-44646
reer
2003-07-01 14:43
2003.07.14
Надеюсь, что 2 тривиальных вопроса по потокам...


3-44592
Fuelfire
2003-06-21 06:33
2003.07.14
Memo-поле и Paradox


14-44858
kaif
2003-06-26 02:20
2003.07.14
Сегодня настоящий праздник