Форум: "Начинающим";
Текущий архив: 2006.10.22;
Скачать: [xml.tar.bz2];
ВнизПроблема с динамическими массивами Найти похожие ветки
← →
Neket (2006-10-05 12:57) [0]Имеется заполненый массив 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 не сработал.
← →
Kolan © (2006-10-05 12:59) [1]
> Count=High(Mass)
Это не верно Количество равноHigh(Mass) + 1
. Тк нумерация идет с 0.
Добавляй так:SetLength(Mass, Length(Mass) + 1);
И вообще выбрось этот Count у тебя в сегда под рукойHigh, Low и Length
.
← →
Kolan © (2006-10-05 13:00) [2]
> SetLength(Mass, Length(Mass) + 1);
Кстати лучьше не по 1 добавлять а сразу побольше, тк добавление - довольно долгая вещь.
← →
Думкин © (2006-10-05 13:05) [3]
> Mass[Count-1]:="$--------------------$";
← →
Kolan © (2006-10-05 13:07) [4]
> Думкин © (05.10.06 13:05) [3]
>
>
> > Mass[Count-1]:="$--------------------$";
>
Я ж говорю лучьше так:Mass[High(Mass)]:="$--------------------$";
В жизни не оПшибешься :)
← →
@!!ex © (2006-10-05 13:35) [5]Вот что бывает, когда в школах и ВУЗах учат инициализировать массивы не с 0, а с 1.... :((
← →
Kolan © (2006-10-05 13:39) [6]
> инициализировать массивы не с 0, а с 1.
Какая разница с чего начинать, главное понимать что делаешь.
← →
@!!ex © (2006-10-05 13:41) [7]
> Какая разница с чего начинать, главное понимать что делаешь.
Согласен.
Но сколько раз натыкался, что народ закончивший ВУЗы с такой же фигней попадались, потому что привыкли, что Count соответствует последнему эллементу массива.
А использование массива с 1, вообще ничем не оправданно.
← →
Kolan © (2006-10-05 13:44) [8]
> А использование массива с 1, вообще ничем не оправданно.
String :)
Какая разница в принципе. Хоть со 100.for I := Low(Arr) to High(Arr)
и пофиг с чего начинать :)
Хотя я тоже всегда с 0 деляю...
← →
Думкин © (2006-10-05 13:45) [9]> @!!ex © (05.10.06 13:35) [5]
> Вот что бывает, когда в школах и ВУЗах учат инициализировать
> массивы не с 0, а с 1.... :((
В Х++ это стандарт языка. И причем тут ВУЗы?
← →
Kolan © (2006-10-05 13:46) [10]
> И причем тут ВУЗы?
Лично меня учили так:Arr: array[1..20] of Integer;
Сейчас я написал бы:Arr: array[0..19] of Integer;
← →
Neket (2006-10-05 13:56) [11]Ды я сам если бы это был обычный массив то с 0 объявил его, но здесь чегото запутался. Спасибо за помощь.
← →
han_malign © (2006-10-05 14:22) [12]
> Вот что бывает, когда в школах и ВУЗах учат инициализировать массивы не с 0, а с 1.... :((
- а наоборот - милениумные "войны" начинаются...
Важно помнить, что [1 - это Номер, а [0 - это Смещение, но и то и другое имеет право быть, в зависимости от конкретного применения.
← →
Думкин © (2006-10-05 14:36) [13]> Kolan © (05.10.06 13:46) [10]
Это скорее к религии, но если у меня массив идет как вектор столбец, то мне удобнее начинать нумерацию с 1.
← →
Kolan © (2006-10-05 14:42) [14]
> Думкин © (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 :(
← →
Sapersky (2006-10-05 14:46) [15]Я ж говорю лучьше так:
Mass[High(Mass)]:="$--------------------$";
В жизни не оПшибешься :)
High для дин. массивов - вызов функции (фактически даже двух). В принципе, очень простых и коротких, но...
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.10.22;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.042 c