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

Вниз

Про 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.04 c
11-1132361931
gdaujk
2005-11-19 03:58
2006.09.24
KOL зеркальный аналог TChart.


6-1146908689
Officeman
2006-05-06 13:44
2006.09.24
NMFTP ListItem


1-1155316602
wipr
2006-08-11 21:16
2006.09.24
Как изменить определенный байт в файле


15-1157135989
Marser
2006-09-01 22:39
2006.09.24
Опрос. Лицензионное профессиональное ПО дома


15-1157380134
DevilDevil
2006-09-04 18:28
2006.09.24
Загрузка Dll из ресурса





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