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;
Корректно ли так заполнять массив
Код:
SetLength(MassF, 0);
Код:
SetLength(MassF,Length(MassF)+1);
вот правильный вариант:
Код:
SetLength(MassF, НеобходимыйРазмер);
for i := 0 to Length(MassF)-1 do
MassF := 0;
for i := 0 to Length(MassF)-1 do
MassF := 0;
этот цикл не будет выполнен ни разу. рановато сессия чета...
Цитата: Phodopus
рановато сессия чета...
-- наверн это хвосты за прошлую покоя не дают )))
Нельзя необходимый размер, т.к. массив динамический
Цитата: sve_ta
Нельзя необходимый размер, т.к. массив динамический
Как можно заполнять массив не зная его размерности?
Можно добавлять элементы в конструкторе или это отдельная процедура?
Цитата: sve_ta
Можно добавлять элементы в конструкторе или это отдельная процедура?
Для начала нужно вычислить размер вашего массива, а уж потом заполнять его данными.
Цитата: hardcase
Как можно заполнять массив не зная его размерности?
За тупизм извеняюсь. Если б знать как, меня бы тут честно небыло...
Размер массива зависит от пользователя
Цитата: 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;
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;
Цитата:
Код:
// Выделенную память нужно освобождать
Finalize(a);
Finalize(a);
Не нужно. Этот код компилятор сгенерирует автоматически, как только переменная a покинет область видимости (в общем-то в том же самом месте).
Цитата: makbeth
Не нужно. Этот код компилятор сгенерирует автоматически, как только переменная a покинет область видимости (в общем-то в том же самом месте).
Крайне древняя привычка :) Я еще подумал, о том что он может это дело сгенерировать (и решил что надо бы глянуть дизассемблерный листинг), но на этом мысль остановилась.
Угу, Finalize больше не к чему, так же как и High/Low - динамические массивы начинаются с нуля (+хоть Delphi и позволяет статическому массиву присваивать любой начальный индекс рекомендуется всё же не юзать эту фичу), а длина определяется Length (что относится и к строкам).