Главная страница
    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.48 MB
Время: 0.042 c
2-1157104819
RebroFF
2006-09-01 14:00
2006.09.24
Работа с PopUpMenu


3-1153450269
Leshiy
2006-07-21 06:51
2006.09.24
Выборка из разных таблиц в зависимости от условия.


15-1157113777
Stexen
2006-09-01 16:29
2006.09.24
VS2005


15-1157180964
Slym
2006-09-02 11:09
2006.09.24
За что удалили ветку про "За что удалили ветку про "Я, тут, стих"


4-1148039556
Elen
2006-05-19 15:52
2006.09.24
Переопределение процедур меню другой программы





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