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

Вниз

Access violation достал....   Найти похожие ветки 

 
Sirus   (2004-06-23 06:51) [0]

Привет Мастера...
Есть проблемка... Непостоянно возникает Access violation...

if HistoryForm<>Nil Then Begin
   History.NormalClose:=True;
   HistoryForm.Close;
   FreeAndNil(HistoryForm);
   Show;
End;

Подозреваю, что HistoryForm не успевает закрываться при Close и ошибка возникает на FreeAndNil...
Как можно вылечить???


 
Sirus   (2004-06-23 07:02) [1]

TForm.Close ждет закрытия формы или нет???


 
Думкин ©   (2004-06-23 07:11) [2]

HistoryForm создан?


 
TUser ©   (2004-06-23 07:36) [3]


> Подозреваю, что ... ошибка возникает на FreeAndNil...

Надо посмотреть отладчиком.

А в OnClose формы что прописано. Я к тому, что м.б. Action = caFree (default), тогда на Free&Nil действительно будет AV.


 
Роман   (2004-06-23 08:53) [4]

Сделай в обработчике THistoryForm.OnClose присвоение action:=cafree вместо того, что ты делаешь.

И вообще, форма разрушается не через Free, а через Release.


 
Роман   (2004-06-23 08:59) [5]

Если ты делаешь то что написал в таймере, то скорее всего ты попадаешь в ситуацию, когра сообщение от таймера обрабатывается чуть раньше сообщения, посланного HistoryForm. Поэтому надо делать Release вместо Free, а затем просто присвоить HistoryForm:=nil;


 
Anatoly Podgoretsky ©   (2004-06-23 11:41) [6]

Так как здесь у тебя повтороное использование перенных, то можно предполагать, что это не единственное место где форма разрушается и создается, отсбда количество мест для ошибки гораздо больше.


 
Sirus   (2004-06-24 07:58) [7]

Форма создается главной формой...
А вышеуказанная процедура вызывается самой формой HistopryForm при нажатии кнопки...
В OnCloseQuery формы HistoryForm:
CanClose:=NormalClose;

Ошибка возникает не всегда... примерно один раз за 10 закрытий формы HistoryForm...

Роман   (23.06.04 08:59) [5] > Таймера нигде нет...

В OnClose ничего нет...


 
TUser ©   (2004-06-24 09:22) [8]


> А вышеуказанная процедура вызывается самой формой HistopryForm
> при нажатии кнопки...

Лучше ее не здесь вызывай.


 
ЮЮ ©   (2004-06-24 09:32) [9]

> А вышеуказанная процедура вызывается самой формой HistopryForm
> при нажатии кнопки...

Тогда чей метод Show вызывается? Самоуничтожаемой HistoryForm ???
И что там за History присоседилась к процессу самоубийства ???

if HistoryForm<>Nil Then Begin
  History.NormalClose:=True;
  HistoryForm.Close;
  FreeAndNil(HistoryForm);
  Show;
End;


 
younghacker   (2004-06-24 10:03) [10]

Роман!

Чем отличается для форм использование Release вместо Free?
Откройте исходники TForm и посмотрите!

Дело в том что часто под BDE форма с открытыми запросами
на которую отправили CM_Release не закрывается сразу, а остается
невидимой но с открытым запросом, и при подтверждении транзакции
запрос переоткрывается как будто форма активна.
Суть в том, что Release помещает в очередь событий окна сообщение на освобождение формы. И обработано оно будет когда будет сделано Application.ProcessMessage; тоесть после возврата  из всех обработчиков формы.

Проблема именно в том что форма дает сообщение освободить себя
и метод сразуже отваливает. А сообщение ждет своей очереди. И когда она приходит. Нужно это понимать. :)

Феномен вызывает именно нестабильное поведение форм в приложении. И периодическое появление всяких глюков связанных с реальным _НЕ_освобождением формы. В том числе ощибки доступа когда форма принудительно освобождена, а кто-то думает что она еще живет на том же месте.

Так что я делал всегда так.

Free вместо Release.

А указатели на форму сбрасываю в деструкторе формы.
Естественно что при создании формы я передаю указатели на указатели формы и также автоматически их инициализирую в конструкторе формы.

Удачи!



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

Форум: "Основная";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.029 c
11-1076102077
Vitaliy
2004-02-07 00:14
2004.07.11
Как поймать WM_CONTEXTMENU


1-1087796493
ПсихЪ
2004-06-21 09:41
2004.07.11
Функции из DCU


14-1088115256
K.o.Z
2004-06-25 02:14
2004.07.11
Англия - Португалия


3-1086933832
coldplayer
2004-06-11 10:03
2004.07.11
RXDBGrid + ADO. Проблема сортировки.


1-1087545504
Mitrofan
2004-06-18 11:58
2004.07.11
Как по существующему меню приложения построить дерево





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