Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Создание и удаление динамических массивов [D5, NT4]


kalinka ©   (2002-04-09 09:48:00) 

Есть динамический массив MyMax с длиной Length_MyMax.
Мне надо увеличить его длину на 1.
Пишу следующее:

//Создаем временный массив MyMax_Tmp с длиной Length_MyMax+1
Length_MyMax := Length_MyMax+1;
SetLength(MyMax_Tmp, Length_MyMax);
//Заполняем временный массив значениями из MyMax
For i := 0 to Length_MyMax do MyMax_Tmp[i] := MyMax[i];
//Освобождаем массив MyMax
Finalize(MyMax);

//Создаем массив MyMax с НОВОЙ длиной Length_MyMax
SetLength(MyMax, Length_MyMax); //*ОШИБКА*//
//Заполняем массив MyMax значениями из MyMax_Tmp
For i := 0 to Length_MyMax do MyMax[i] := MyMax_Tmp[i];
//Освобождаем временный массив
Finalize(MyMax_Tmp);
//************************************************

В месте, обозначенном //*ОШИБКА*// выдается ошибка: access violation at 0x00406a79 write of address 0x00030e94

Зато, если я в этом месте пишу SetLength(MyMax, Length_MyMax-1), то есть создаю его с прежней длиной, то ошибки нет.

Как мне увеличить длину динамического массива?


kalinka   (2002-04-09 10:48:00) [1]

Miwa ©
Будет :)))

Kornet ©
спасибо, работает =:)


Kornet   (2002-04-09 10:33:00) [2]

сорри, SetLength(MyMax, High(MyMax)+2);


Kornet   (2002-04-09 10:31:00) [3]

а не проще писать вот так:
SetLength(MyMax_Tmp, High(MyMax_Tmp)+2); - увеличение массива MyMax_Tmp на один элемент?


Miwa   (2002-04-09 10:17:00) [4]

Будет выглядеть еще короче, если написать inc(Length_MyMax);o)


kalinka   (2002-04-09 10:09:00) [5]

Ха-ха, работает!!! Теперь это выглядит гораздо короче:

Length_MyMax := Length_MyMax+1;
SetLength(MyMax, Length_MyMax);


kalinka   (2002-04-09 10:06:00) [6]

-=CrazyFish=- ©
ААА, глупая я, глупая!!!! Я же знаю, что надо писать
For i := 0 to Length_MyMax-1 do
Сглупила. Бывает. Утро раннее было. :) Бывает, уткнешься в какую-нибудь ошибку, а элементарной лажи-то и не замечаешь.
А за совет, спасибо большое!


-=CrazyFish=-   (2002-04-09 09:59:00) [7]

нужно писать
For i := 0 to Length_MyMax-1 do

При увеличении длины динамического массива данные в нем не теряются, поэтому временный массив MyMax_Tmp не нужен


Наверх

Титульная страница Поиск, карта сайта Написать письмо