Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.07.14;
Скачать: [xml.tar.bz2];

Вниз

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

 
Пубертанец   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.008 c
9-44532
all
2003-01-27 18:47
2003.07.14
Где в инете взять кн. по OpenGl


4-44949
firefox
2003-05-10 17:34
2003.07.14
Как сменить иконку у файла


14-44898
Name
2003-06-27 17:25
2003.07.14
Помяните старого форумчанина Black Cat недавно погиб


1-44764
INCOGNITO
2003-07-02 00:43
2003.07.14
ReadOnly Files


14-44868
irq
2003-06-26 16:02
2003.07.14
Управление чужим приложением в Win95/98





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