Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.09.2023, 01:55   #1
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 627
По умолчанию Нормально ли очищается память при ошибке?

Код:
Procedure AAA
var
...
Код:
Procedure BBB;
begin
  try
    AAA
  except
    ...
  end;
end;
И если в процессе выполнения процедуры ААА происходит ошибка, которая в самой процедуре ААА не отлавливается, то что происходит?

Программа перескакивает на секцию except в процедуре ВВВ?

Вопрос: нормально ли очищается память, которую процедура ААА выделяла под переменные? (Не объектные)
Kronos913 вне форума Ответить с цитированием
Старый 18.09.2023, 10:25   #2
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
нормально ли очищается память, которую процедура ААА выделяла под переменные?
А как она эту память выделяла? Вызовом каких-либо процедур типа GetMem?
northener вне форума Ответить с цитированием
Старый 18.09.2023, 11:40   #3
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 627
По умолчанию

Код:
Procedure AAA
 var
   i:integer
   p:pointer
   b:byte

Последний раз редактировалось Kronos913; 18.09.2023 в 19:30.
Kronos913 вне форума Ответить с цитированием
Старый 19.09.2023, 01:55   #4
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Тут собственно нет именно "выделения" памяти. Локальные переменные процедуры располагаются в стеке. Для чего просто указатель вершины стека компилятор смещает на нужное количество байт. При этом прежнее значение указателя вершины стека сохраняется в специальном регистре. После завершения процедуры штатным или нештатным (через блок except) образом просто восстанавливается старый указатель. Никакой очистки памяти или её освобождение тут не происходит по причине ненужности.
northener вне форума Ответить с цитированием
Старый 19.09.2023, 08:12   #5
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,777
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
Никакой очистки памяти или её освобождение тут не происходит
На самом деле восстановление указателя стека и есть такая очистка, если его установку при входе в процедуру считать выделением памяти.
Vapaamies на форуме Ответить с цитированием
Старый 20.09.2023, 02:10   #6
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Цитата:
Сообщение от Vapaamies Посмотреть сообщение
На самом деле восстановление указателя стека и есть такая очистка, если его установку при входе в процедуру считать выделением памяти.
На самом деле тут нужно засовывать паяльник в жопу ТС, чтобы узнать что именно его волнует в таком простейшем случае.
northener вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Очищается область при перемещении родительского окна Alexan-Dwer Win Api 0 10.04.2017 23:05
При выводе картинок в цикле, TDrawGrid очищается KBO Помощь студентам 14 16.07.2015 16:59
программа на х32 нормально,а на х64 нет beegl Общие вопросы Delphi 2 10.05.2013 08:09
Очищается форма :( kerbeross JavaScript, Ajax 1 23.03.2011 22:12