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

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

Проблема с динамическими массивами [D7]


Neket ©   (2006-10-05 12:57:00) 

Имеется заполненый массив MASS в котором колличество элементов равно Count (Count=High(Mass)). Когда я вывожу в Мемо1 данные из массива то все выводится нормално, но при попытки добавления нового элемента следующим образом :
Count:=Count+1;
SetLength(Mass, Count);
Mass[Count]:='$--------------------$';

Он начинает матерится и ругается на память. Подскажите гдк ошибка.
P.S.
Причем Вначале, т.е перед выводом в Мемо1 я заполняю массим таким обазом:
Count:=0
............
Count:=Count+1;
SetLength(Mass, Count);
Mass[count-1]:=s;
...........
Count:=Count-1;
for i:=0 to Count do Memo1.Lines.Add(Mass[i]);
Count:=Count+1;
SetLength(Mass, Count);
Mass[Count]:='$--------------------$'; // И вот здесть он начинает ругаться. Такое ощущение что SetLength не сработал.


Sapersky   (2006-10-05 14:46:00) [1]

Я ж говорю лучьше так:
Mass[High(Mass)]:='$--------------------$';
В жизни не оПшибешься :)


High для дин. массивов - вызов функции (фактически даже двух). В принципе, очень простых и коротких, но...


Kolan   (2006-10-05 14:42:00) [2]


> Думкин ©   (05.10.06 14:36) [13]


Массив с нуля я не по религии начинаю, а после того как обжогся вот на чем:

procedure TForm1.FormCreate(Sender: TObject);
var
 Arr: array[1..3] of Integer;
begin
 Arr[1] := 1;
 Arr[2] := 2;
 Arr[3] := 3;
 PrintFirstElement(Arr);
end;

procedure TForm1.PrintFirstElement(Arr: array of Integer);
begin
 ShowMessage(IntToStr(Arr[1]));
end;


Не смотря на то что Arr с 1 внутри PrintFirstElementнумерация будет с 0 :(


Думкин   (2006-10-05 14:36:00) [3]

> Kolan ©   (05.10.06 13:46) [10]

Это скорее к религии, но если у меня массив идет как вектор столбец, то мне удобнее начинать нумерацию с 1.


han_malign   (2006-10-05 14:22:00) [4]


> Вот что бывает, когда в школах и ВУЗах учат инициализировать массивы не с 0, а с 1.... :((

- а наоборот - милениумные "войны" начинаются...
Важно помнить, что [1 - это Номер, а [0 - это Смещение, но и то и другое имеет право быть, в зависимости от конкретного применения.


Neket   (2006-10-05 13:56:00) [5]

Ды я сам если бы это был обычный массив то с 0 объявил его, но здесь чегото запутался. Спасибо за помощь.


Kolan   (2006-10-05 13:46:00) [6]


> И причем тут ВУЗы?

Лично меня учили так:

Arr: array[ 1..20] of Integer;

Сейчас я написал бы:

Arr: array[ 0..19] of Integer;


Думкин   (2006-10-05 13:45:00) [7]

> @!!ex ©   (05.10.06 13:35) [5]
> Вот что бывает, когда в школах и ВУЗах учат инициализировать
> массивы не с 0, а с 1.... :((

В Х++ это стандарт языка. И причем тут ВУЗы?


Kolan   (2006-10-05 13:44:00) [8]


> А использование массива с 1, вообще ничем не оправданно.

String :)

Какая разница в принципе. Хоть со 100.
for I := Low(Arr) to High(Arr)
и пофиг с чего начинать :)

Хотя я тоже всегда с 0 деляю...


@!!ex   (2006-10-05 13:41:00) [9]


> Какая разница с чего начинать, главное понимать что делаешь.

Согласен.
Но сколько раз натыкался, что народ закончивший ВУЗы с такой же фигней попадались, потому что привыкли, что Count соответствует последнему эллементу массива.
А использование массива с 1, вообще ничем не оправданно.


Kolan   (2006-10-05 13:39:00) [10]


> инициализировать массивы не с 0, а с 1.

Какая разница с чего начинать, главное понимать что делаешь.


@!!ex   (2006-10-05 13:35:00) [11]

Вот что бывает, когда в школах и ВУЗах учат инициализировать массивы не с 0, а с 1.... :((


Kolan   (2006-10-05 13:07:00) [12]


> Думкин ©   (05.10.06 13:05) [3]
>
>
> > Mass[Count-1]:='$--------------------$';
>


Я ж говорю лучьше так:

Mass[High(Mass)]:='$--------------------$';

В жизни не оПшибешься :)


Думкин   (2006-10-05 13:05:00) [13]


> Mass[Count -1]:='$--------------------$';


Kolan   (2006-10-05 13:00:00) [14]


> SetLength(Mass, Length(Mass) + 1);

Кстати лучьше не по 1 добавлять а сразу побольше, тк добавление - довольно долгая вещь.


Kolan   (2006-10-05 12:59:00) [15]


> Count=High(Mass)

Это не верно Количество равно High(Mass) + 1. Тк нумерация идет с 0.

Добавляй так:

SetLength(Mass, Length(Mass) + 1);

И вообще выбрось этот Count у тебя в сегда под рукой High, Low и Length.


Наверх

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