![]() |
+7 (495) 229-0436 | ![]() |
shopadmin@itshop.ru | 119334, г. Москва, ул. Бардина, д. 4, корп. 3 | ![]() |
![]() |
![]() |
|
|
Изменение размеров массивов17.08.2012 13:25
Kest
Delphi до версии 4.0 (Хотя, начиная с четвертой версии, Delphi поддерживает динамические массивы, вставка и удале- type Изменение размеров массива - мощная, но несколько опасная методика. Ра- ботая с массивом, Delphi не определяет его размер. В программе SizeArr Delphi воспринимает массив как указатель, содержащий миллион ячеек. Если программа фактически выделила память только для 10 элементов, Delphi не определит по- пытку доступа к 1 00-му элементу как ошибку. Вместо того чтобы выдать при компи- ляции сообщение о том, что индекс массива вышел за пределы, во время выполне- ния программа будет пытаться сделать запись в 100-ю позицию массива. В лучшем случае обращение к этой ячейке памяти просто остановит работу программы. В худ- шем это вызовет неявный сбой, который будет очень сложно найти. Подобная проблема возникает, если программа использует неверно заданную нижнюю границу массива. Предположим, что тип массива определен так, как опи- сано в следующем фрагменте кода: TIntArray = array [1.. 1000000] of Integer;
Подобную ошибку допустить очень просто. Неприятности начнутся, когда программа попробует обратиться к элементу массива в нулевой позиции. При объявлении в процедуре нового массива, такого как PIntArray, его гра- ницы не указываются. Необходимо помнить, какой тип массива вы определили да- лее в программе. Программа освобождает выделенную для обычного массива память, когда он выходит из области видимости. Например, массив, объявленный в пределах про- цедуры, автоматически освобождается, когда процедура заканчивается. С другой стороны, память, выделенная с помощью процедуры GetMem, остает- ся таковой до тех пор, пока не освободится с помощью процедуры FreeMem. Пока программа не будет завершена, доступа к памяти не будет. При этом неоднократ- ный вызов процедуры занимает много системной памяти. Наконец, существенную проблему создает обращение к памяти, освобожден- ной процедурой FreeMem. Если программа освобождает память массива и затем обращается к этому массиву, то следствием может быть либо ее остановка, либо неявный сбой. Можно сократить вероятность возникновения такого эффекта, сбрасывая указатель массива на нуль после освобождения памяти. В этом случае вместо неявного сбоя попытка обращения к массиву вызовет ошибку нарушения доступа. Несмотря на подстерегающие опасности изменение размеров массива - очень мощная методика. При работе со списками, меняющими свой размер, она позволя- ет достигать очень высокой производительности. Delphi, начиная с версии 4.0, поддерживает встроенный механизм изменяемых массивов. По своему синтаксису работа со встроенными динамическими массива- ми очень похожа на работу с обычными массивами языка Pascal. Сначала следует объявить переменную массива, не указывая при этом его гра- ниц. Изменение его размера производится с помощью процедуры SetLength. Так как заранее длина массива не известна, потребуются еще три функции: Length, возвращающая количество элементов массива, Low, возвращающая индекс перво- го элемента (обычно 0) и High, возвращающая индекс последнего элемента.
// Изменение размера массива. Ссылки по теме |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
О нас |
Интернет-магазин ITShop.ru предлагает широкий спектр услуг информационных технологий и ПО.
На протяжении многих лет интернет-магазин предлагает товары и услуги, ориентированные на бизнес-пользователей и специалистов по информационным технологиям. Хорошие отзывы постоянных клиентов и высокий уровень специалистов позволяет получить наивысший результат при совместной работе. В нашем магазине вы можете приобрести лицензионное ПО выбрав необходимое из широкого спектра и ассортимента по самым доступным ценам. Наши менеджеры любезно помогут определиться с выбором ПО, которое необходимо именно вам. Также мы проводим учебные курсы. Мы приглашаем к сотрудничеству учебные центры, организаторов семинаров и бизнес-тренингов, преподавателей. Сфера сотрудничества - продвижение бизнес-тренингов и курсов обучения по информационным технологиям.
|
119334, г. Москва, ул. Бардина, д. 4, корп. 3 +7 (495) 229-0436 shopadmin@itshop.ru |
|
© ООО "Interface Ltd." Продаем программное обеспечение с 1990 года |