Список форумов Шадринский форум -> Программирование -> Delphi, Pascal, C, C# -> Destroy
Начать новую тему   Ответить на тему   вывод темы на печать

Destroy

Автор
Сообщение
zBoy
Писатель


Пол: Пол:Муж.
Зарегистрирован: 29.01.2007
Сообщения: 492


Статус: Offline
СообщениеДобавлено: 2010.11.08 23:20.28
Ответить с цитатой
Имеется некий объект, состоящий из нескольких объектов. У него есть метод Destroy, в котором данный объект уничтожается. В этом методе по идее нужно прописать методы Destroy всех составных объектов. Но при попытке закрыть форму с объектом, у которого Destroy описан таким образом, появляется ошибка AV. Я не понимаю, в чём дело. Кто знает, подскажите.
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
Rik
Заслуженный писатель


Пол: Пол:Муж.
Зарегистрирован: 22.10.2006
Сообщения: 2447
Откуда: Челябинск

Статус: Offline
СообщениеДобавлено: 2010.11.11 23:51.28
Ответить с цитатой
Нужен код, в слепую непонятно что там у вас и укажите язык на котором пишите...
Используйте отладчик, найдите место в котором валится программа и смотрите, что там происходит. Скорее всего вы пытаетесь разрушить объект, который не существует, т.е. либо он уже разрушен, либо он вообще не был создан. Посмотрите, правильно ли у вас вызывается метод Destroy родительского класса, т.е.:

destructor TMyObject.Destroy;
begin
inherited Destroy; Неправильный код, метод Destroy родительского класса должен быть вызван не здесь
Obj1.Free;
Obj2.Free;
end;

destructor TMyObject.Destroy;
begin
Obj1.Free;
Obj2.Free;
inherited Destroy; Правильно...
end;
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
zBoy
Писатель


Пол: Пол:Муж.
Зарегистрирован: 29.01.2007
Сообщения: 492


Статус: Offline
СообщениеДобавлено: 2010.11.12 19:02.38
Ответить с цитатой
Delphi 7.
Tclass1=class(Timage)
private

text:Tmemo;
next:Tdiagram;
back:Tdiagram;
tim:TTimer;
connector:TButton;
....
destructor Destroy; override;
...
destructor Tdiagram.Destroy;
begin

Connector.Destroy;
Connector:=nil;

tim.Destroy;
tim:=nil;
text.Destroy;
text:=nil;
inherited;

end;

- Если просто вызываем дестрой - всё проходит нормально. но как только закрываем форму (объекты на ней есть) то вылазит ошибка.
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
Rik
Заслуженный писатель


Пол: Пол:Муж.
Зарегистрирован: 22.10.2006
Сообщения: 2447
Откуда: Челябинск

Статус: Offline
СообщениеДобавлено: 2010.11.13 23:30.42
Ответить с цитатой
zBoy писал(а):
Delphi 7.
Tclass1=class(Timage)
private

text:Tmemo;
next:Tdiagram;
back:Tdiagram;
tim:TTimer;
connector:TButton;
....
destructor Destroy; override;
...
destructor Tdiagram.Destroy;
begin

Connector.Destroy;
Connector:=nil;

tim.Destroy;
tim:=nil;
text.Destroy;
text:=nil;
inherited;

end;

- Если просто вызываем дестрой - всё проходит нормально. но как только закрываем форму (объекты на ней есть) то вылазит ошибка.


Используйте метод Free а не Destroy для разрушения объектов, не вызывайте Destroy напрямую, он будет вызван автоматичкски. Выложте код целиком...
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Страница 1 из 1
Начать новую тему   Ответить на тему   вывод темы на печать
Показать сообщения:   
Список форумов Шадринский форум -> Программирование -> Delphi, Pascal, C, C# -> Destroy

 
Перейти: 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы можете скачивать файлы