![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Участник клуба
Регистрация: 12.08.2008
Сообщений: 1,977
|
![]()
В процессе разработки одной программы появилась ошибка :
![]() В конечном итоге оказалось , что код Код:
Но если я на форму добавлю кнопку "Закрыть программу" (Button2), то в почти аналогичном коде переполнения стека нет, ошибки нет: Код:
И не сомневайся даже ... отдых - кайф, работа - лажа!
|
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]() Код:
Но кто его освободит? Сам о себе он не позаботится. В OnDestroy Код:
|
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
в первом случае рекурсия, так как вы из события OnClose вызываете Close, который вызывает OnClose, и тд.
Человек_Борща, поправка верна, но в данном случае она все равно помрет. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#4 | |
Участник клуба
Регистрация: 12.08.2008
Сообщений: 1,977
|
![]()
Человек_Борща - первое, что пробовал - это, конечно < f. Free>, эффект тот же.
Цитата:
Пепел Феникса - т.е. я так понимаю, что если применять метод TForm1.FormClose ( для формы, а значит и для всей проги, если она однооконная), то в процедуре надо выполнять какие то действия, связанные с програмными параметрами (например - сохранить значения в файл, или отключить устройство перед закрытием). В принципе, ответ на свой вопрос я получил - ключевое слово "рекурсия". Не думал (не знал), что метод OnClose - Close вызывает бесконечную рекурсию. Всем СПАСИБО!
И не сомневайся даже ... отдых - кайф, работа - лажа!
Последний раз редактировалось DeKot; 02.02.2012 в 01:34. |
|
![]() |
![]() |
![]() |
#5 | ||
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]() Цитата:
я вообще люблю делать модули независимыми(нет глоб переменных, только поля, все что надо создается/грузиться в OnCreate или по ходу работы с формой этой, а в OnDestroy уничтожаеться/сохраняеться) Цитата:
OnClose возникает именно после Close(ну не только поидее), потому у вас непрямая рекурсия. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
||
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
SendMessage переполнение стека | LesnikFFF | Общие вопросы Delphi | 5 | 01.07.2011 15:02 |
Переполнение аппаратного стека | Levsha100 | Свободное общение | 6 | 13.07.2010 01:59 |
Переполнение стека | NoHeart | Общие вопросы Delphi | 8 | 08.11.2009 16:03 |
Переполнение стека | Ake | Паскаль, Turbo Pascal, PascalABC.NET | 3 | 30.05.2009 22:39 |
Переполнение Стека | Викдон | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 19.12.2008 19:16 |