Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 03.11.2012, 14:39   #1
Sёker
Пользователь
 
Регистрация: 30.09.2011
Сообщений: 27
Вопрос Стандартная процедура SetLength внутри процедуры не работает

Не могу понять, почему в моей процедуре Cut_Array не срабатывает стандартная процедура SetLength? Можно ли это исправить? Прошу помощи у сведущих и благодарю за ответы.

Код:
type TBArray = array of Byte;
...
procedure Cut_Array(Arr:TBArray; Cuted:Word);
var
Len:Word;
NewLen:Word;
begin
Len:=Length(Arr);
NewLen:=Len-Cuted;
Move(Arr[2],Arr[12],5);
SetLength(Arr,NewLen);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i,Cuted,Len:Integer;
M:TBArray;
s:String;
begin
Len:=20;
Cuted:=3;
Memo1.Clear;
Memo2.Clear;
SetLength(M,Len);
for i:=0 to Len-1 do
  begin
  M[i]:=i;
  s:=IntToStr(M[i]);
  Memo1.Lines.Add(s);
  end;
Cut_Array(M,Cuted);
//SetLength(M,Len-Cuted);
for i:=0 to Length(M)-1 do
  begin
  s:=IntToStr(M[i]);
  Memo2.Lines.Add(s);
  end;
M:=Nil;
end;
...
Спешу признать, что сама процедура Cut_Array не имеет необходимости. Процедура написана, чтобы показать, что SetLength, вызванная внутри любой процедуры не срабатывает. Хотя та же "Move" работает.

Последний раз редактировалось Sёker; 03.11.2012 в 14:41.
Sёker вне форума
Старый 03.11.2012, 14:51   #2
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Утверждение легкомысленное, однако.
Динамические массивы в таких случаях нужно передавать по ссылке, а не по значению.
Код:
procedure Cut_Array(var Arr:TBArray; Cuted:Word);
Скандербег вне форума
Старый 03.11.2012, 14:55   #3
Sёker
Пользователь
 
Регистрация: 30.09.2011
Сообщений: 27
По умолчанию

Цитата:
Сообщение от Скандербег Посмотреть сообщение
Утверждение легкомысленное, однако.
Динамические массивы в таких случаях нужно передавать по ссылке, а не по значению.
Код:
procedure Cut_Array(var Arr:TBArray; Cuted:Word);
Благодарю за помощь и серьёзность!
Sёker вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
стандартная галерея на dle не работает emdroof WordPress и другие CMS 0 13.03.2012 23:11
Процедура рисования полигона. Код внутри Silverstone Помощь студентам 0 25.12.2011 13:52
Вызов обработчика внутри собственной процедуры DeKot Общие вопросы Delphi 7 09.12.2009 19:13
ожидание внутри процедуры Juffin Общие вопросы Delphi 5 01.06.2009 13:52
Вкаких случаях может быть полезной процедура SetLength Ainur Помощь студентам 2 22.05.2009 12:01