Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Корректно ли так заполнять массив

57K
05 апреля 2010 года
sve_ta
6 / / 05.04.2010
Код:
constructor ТContFigur.Create();
var i: integer;
begin
  inherited Create();
  SetLength(MassF, 0);
  for i := 0 to Length(MassF)-1 do
    begin
      SetLength(MassF,Length(MassF)+1);
      MassF [Length(MassF)-1]:= MassF;
   end;
end;


Думается что все правильно, просто уже крыша отезжает от сессии
1.8K
05 апреля 2010 года
LM(AL/M)
332 / / 20.12.2005
думаю что этот цикл не выполнится ни разу (изза
 
Код:
SetLength(MassF, 0);
), а если выполнится то никогда не остановится )) (изза
 
Код:
SetLength(MassF,Length(MassF)+1);
)

вот правильный вариант:

 
Код:
SetLength(MassF, НеобходимыйРазмер);

  for i := 0 to Length(MassF)-1 do

      MassF := 0;
14
05 апреля 2010 года
Phodopus
3.3K / / 19.06.2008
этот цикл не будет выполнен ни разу. рановато сессия чета...
1.8K
05 апреля 2010 года
LM(AL/M)
332 / / 20.12.2005
Цитата: Phodopus
рановато сессия чета...

-- наверн это хвосты за прошлую покоя не дают )))

57K
05 апреля 2010 года
sve_ta
6 / / 05.04.2010
Спасибо, что откликнулись. Это действительно хвосты за прошлую :(
Нельзя необходимый размер, т.к. массив динамический
5
05 апреля 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: sve_ta
Нельзя необходимый размер, т.к. массив динамический


Как можно заполнять массив не зная его размерности?

57K
05 апреля 2010 года
sve_ta
6 / / 05.04.2010
Можно добавлять элементы в конструкторе или это отдельная процедура?
5
05 апреля 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: sve_ta
Можно добавлять элементы в конструкторе или это отдельная процедура?


Для начала нужно вычислить размер вашего массива, а уж потом заполнять его данными.

57K
05 апреля 2010 года
sve_ta
6 / / 05.04.2010
Цитата: hardcase
Как можно заполнять массив не зная его размерности?




За тупизм извеняюсь. Если б знать как, меня бы тут честно небыло...

57K
05 апреля 2010 года
sve_ta
6 / / 05.04.2010
Размер массива зависит от пользователя
5
05 апреля 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: sve_ta
Размер массива зависит от пользователя


Код:
var
  a_size : integer;
  a : array of integer;
  i : integer;
begin
// спрашиваем пользователя
  a_size := AskUserForArraySize();
// выделяем память - изготавливаем массив
  SetLength(a, a_size);
// работаем с массивом
  for i := Low(a) to High(a) do
  begin
    a := i;
  end;

// выделенную память нужно освобождать
  Finalize(a);
end;
303
05 апреля 2010 года
makbeth
1.0K / / 25.11.2004
Цитата:

 
Код:
// Выделенную память нужно освобождать
Finalize(a);


Не нужно. Этот код компилятор сгенерирует автоматически, как только переменная a покинет область видимости (в общем-то в том же самом месте).

5
05 апреля 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: makbeth
Не нужно. Этот код компилятор сгенерирует автоматически, как только переменная a покинет область видимости (в общем-то в том же самом месте).


Крайне древняя привычка :) Я еще подумал, о том что он может это дело сгенерировать (и решил что надо бы глянуть дизассемблерный листинг), но на этом мысль остановилась.

253
05 апреля 2010 года
Proger_XP
1.5K / / 07.08.2004
Угу, Finalize больше не к чему, так же как и High/Low - динамические массивы начинаются с нуля (+хоть Delphi и позволяет статическому массиву присваивать любой начальный индекс рекомендуется всё же не юзать эту фичу), а длина определяется Length (что относится и к строкам).
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог