![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с динамическими массивами [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.