Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.24;
Скачать: CL | DM;

Вниз

Про DynArray и исключения   Найти похожие ветки 

 
Alex_KV   (2006-09-01 10:26) [0]

Здравствуйте!
Вот такой вопрос интересует.
При работе Delphi хитро работает с дин. масивами и строками.
Разобраться помогла статья на RSDN.
Но некоторые вопросы остались. Например, если в процедуре объявлена
лок. переменная типа дин.массив. Для нее Delphi генерит доп. код инициализации при входе в процедуру и код финализации из массива.
Соответственно, я в процедуре смело работаю с этой переменной и при выходе из процедуры голова не болит - память, отвед. под дин. массив, должна будет освобожена.
А вот если в процедуре возникнет исключение? Освобоиться ли память?
Нужно ли при работе заключать код в try-блоки, чтоб железно память освободилась?


 
Ega23 ©   (2006-09-01 10:30) [1]


> А вот если в процедуре возникнет исключение? Освобоиться
> ли память?


А ты проверь. Через F12 посмотри, какие вызовы будут идти.


 
Ketmar ©   (2006-09-01 10:30) [2]

> [0] Alex_KV   (01.09.06 10:26)
вообще-то рекомендовано всё ресурсы освобождать руками (кроме строк, потому что это уже маразм %-) -- для вящей понятности.


 
jack128 ©   (2006-09-01 11:05) [3]

Ketmar ©   (01.09.06 10:30) [2]
вообще-то рекомендовано всё ресурсы освобождать руками (кроме строк, потому что это уже маразм %-) -- для вящей понятности.

ну теже Variant"ы , дин массивы - это такой же маразм, как и строки ;-)
Alex_KV   (01.09.06 10:26)
Освобоиться ли память?

да.  Дельфя неявно ставит блок try-finally-end для всех long strings/dynamic arrays/Variants/interfaces .
Единственный момент, когда тут может быть мемлик, это использование ExitThread/TerminateThread и тому подобных функций..


 
Barloggg   (2006-09-01 12:36) [4]

А еще есть секция finalize, только мне пока недосуг было проверить выполняется ли она при вылете или нет.


 
Плохиш ©   (2006-09-01 12:39) [5]


> Barloggg   (01.09.06 12:36) [4]
> А еще есть секция finalize,

Давай мух и котлеты в одну кучу валить не будем.


 
Джо ©   (2006-09-01 12:42) [6]


> Barloggg   (01.09.06 12:36) [4]
>
> А еще есть секция finalize,

... и никакого отношения к сабжу она не имеет. Если уж на то пошло, то к сабжу имеет некоторое отношение процедура Finalize.


 
Barloggg   (2006-09-01 13:22) [7]

ну, почему же. когда у меня сами по себе висят несколько глобальных объектов отдельно от главной формы и их убивание стоит в деструкторе это самой формы да еще и с условиями, то почему бы и не проверить на всякий случай их еще и в секции finalize.


 
Джо ©   (2006-09-01 13:26) [8]


> Barloggg   (01.09.06 13:22) [7]
>
> ну, почему же. когда у меня сами по себе висят несколько
> глобальных объектов отдельно от главной формы и их убивание
> стоит в деструкторе это самой формы да еще и с условиями,
>  то почему бы и не проверить на всякий случай их еще и в
> секции finalize.

Где в топике спрашивается о глобальных (и каких-либо вообще) "объектах"? Где там спрашивается также о "формах"?


 
Alex_KV   (2006-09-01 13:39) [9]

To Ega23
Да, просмотр CPU внес некоторые объяснения
Составил процедурку
procedure X;
var a : array of Double;
begin
 SetLength(a, 1);
 a[0] := 1 / 0;
end;CODE>
DynArrayClear вызывается и с исключением и без (с/без второй строки).
Наверно на этом вопрос закрыт.


 
Джо ©   (2006-09-01 13:45) [10]


> DynArrayClear вызывается и с исключением и без (с/без второй
> строки).

Дык, а чем не устроил ответ jack128 ©   (01.09.06 11:05) [3]?  Хотя, конечно, самому проверить оно надежнее :)


 
Ketmar ©   (2006-09-01 15:13) [11]

> [3] jack128 ©   (01.09.06 11:05)
ну, это вопрос вкуса, конечно. я зачастую даже строки освобождаю. %-)


 
Сергей М. ©   (2006-09-01 15:16) [12]


>  a[0] := 1 / 0;


К чему такие сложности ?)

Для "полевых испытаний" по сабжу (и не только) вполне подходит классическое
raise Exception.Create("");


 
Плохиш ©   (2006-09-01 15:28) [13]


> >  a[0] := 1 / 0;

А эта запись, кстати, может и не вызвать исключения ;-) NAN



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

Текущий архив: 2006.09.24;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.03 c
15-1157019915
Idiot
2006-08-31 14:25
2006.09.24
Есть ли что то на подобе процедуры VAL в БД ....


2-1157630697
XAN
2006-09-07 16:04
2006.09.24
programma iz delphi


11-1133308723
Neiroman
2005-11-30 02:58
2006.09.24
Справочник по KOL


15-1157231348
Zarmi
2006-09-03 01:09
2006.09.24
XP Manifest


15-1157295084
vrem
2006-09-03 18:51
2006.09.24
Раскол