Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1159546902
Desdechado
2006-09-29 20:21
2006.10.22
Программа для включения задизабленных кнопок


2-1160215558
NGPOL
2006-10-07 14:05
2006.10.22
Немодальная форма в DLL


2-1159782195
Steep
2006-10-02 13:43
2006.10.22
Поиск


2-1159359502
Rustam
2006-09-27 16:18
2006.10.22
Индекс


15-1159540793
Ringo
2006-09-29 18:39
2006.10.22
Есть контакт!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский