Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Почему это не работает


Страницы:   1 2 3 4

_koha ©   (2008-08-19 13:49:00) 

Компилируется без ошибок, но при работе "падает".

//..............................
var
 Conter: integer;
 N: array of integer;
 buf: array of integer;

//..................................
procedure TForm2.Button3Click(Sender: TObject);
Var
 num:integer;
begin
 Num:=Length(N);
 SetLength(Buf,Num);
 Move(N, Buf, Num);
 Inc(Num);
 setlength(N, Num);
 move(Buf, N, Num-1);
 N[Num]:=num;
 for num:=0 to Length(N)-1 do
   memo1.Lines.Add(IntToStr(N[num]));
 memo1.Lines.Add('----------------------------');
end;


Сергей М.   (2008-08-19 14:48:00) [41]

Inc(Num);
SetLength(N, Num);
N[Pred(Num)] := Num;

вгот и весь велосипед)


Palladin   (2008-08-19 14:48:00) [42]


> _koha   (19.08.08 14:44) [22]

а что там будет по твоему? спички?


Medbe}I{onok XML   (2008-08-19 14:46:00) [43]

Снимись с ручника-то.
Мув копирует не спички, а байты.
Каждая спичка состоит из четырех байт.


Сергей М.   (2008-08-19 14:45:00) [44]


> _koha   (19.08.08 14:24) [16]
>
>


ПРежде чем городить велосипед, нужно почитать справку.
Там четко и внятно сказано про SetLength:

Existing characters in the string or elements in the array are preserved

Так что все эти твои потуги с мувом попросту бестолковые телодвижения)


_koha   (2008-08-19 14:44:00) [45]


>Medbe}I{onok XML ©   (19.08.08 14:38) [21]
> А после мува в нем будет мусор


А с чего ты взял?


Medbe}I{onok XML   (2008-08-19 14:38:00) [46]

а будет работать как функция увеличения д.массива на +1

Длинна массива увеличится.
А после мува в нем будет мусор.


Medbe}I{onok XML   (2008-08-19 14:37:00) [47]

Пациент очень тяжелый. Мы его щас потеряем.


_koha   (2008-08-19 14:36:00) [48]


> Medbe}I{onok XML ©   (19.08.08 14:24) [17]
</I
> Ага, правильный. Только бессмысленный.

>

Это же модель просто пример, когда код гораздо сложнее и запутанный, то прибегают к простым моделям, для того, чтобы понять их суть. Для тебя он бессмысленный для меня вовсе и не бессмысленный, а будет работать как функция увеличения д.массива на +1


Medbe}I{onok XML   (2008-08-19 14:25:00) [49]

и как ты думаешь сколько спичек я должен вернуть их второго коробка?
одинадцать  или всетаки (Num-1) десять?


Move не имеет никакого понятия ни про спички ни про тип Integer


Medbe}I{onok XML   (2008-08-19 14:24:00) [50]

Правильный код

Ага, правильный. Только бессмысленный.


_koha   (2008-08-19 14:24:00) [51]


> Medbe}I{onok XML ©   (19.08.08 14:11) [10]
> И в чем сакральный смысл передачи муву длины массива минус
> один?"Больше строчек кода, веселых и странных"?


Очень простой:
вот о меня есть коробок спичек в нем их 10 и одинадцатая не влазит, то я беру такой же коробок (для 10 спичек) и перекладываю списки из первого во второй затем растягиваю первый коробок на +1 спичку
Inc(Num);
setlength(N, Num);

и как ты думаешь сколько спичек я должен вернуть их второго коробка?
одинадцать  или всетаки (Num-1) десять?


Palladin   (2008-08-19 14:23:00) [52]


> она с нулевого элемента копирует из масиивов

а ты задумывался о том, что есть идентификатор дин массива?


Medbe}I{onok XML   (2008-08-19 14:23:00) [53]

Допустим N = 2
Твой мув скопирует 1 байт.
В то время как любой элемент массива (Integer) состоит из четырех байт.
Ку?


Сергей М.   (2008-08-19 14:18:00) [54]


> она с нулевого элемента копирует из масиивов


А где ты вообще видишь в прототипе ф-ции Move(), что она работает с массивами, да еще и с динамическими ?


_koha   (2008-08-19 14:15:00) [55]

Правильный код


//..............................
var
 Conter: integer;
 N: array of integer;
 buf: array of integer;
//..................................
procedure TForm2.Button3Click(Sender: TObject);
Var
 num:integer;
begin
 Num:=Length(N);
 SetLength(Buf,Num);
 Move( N[0], Buf[0], Num);
 Inc(Num);
 setlength(N, Num);
 move( Buf[0], N[0], Num-1);
 N[ Num-1]:=num;
 for num:=0 to Length(N)-1 do
   memo1.Lines.Add(IntToStr(N[num]));
 memo1.Lines.Add('----------------------------');


Что касается функции move() был уверен, что она с нулевого элемента копирует из масиивов, почему ей явно надо указывать начало массива?


Medbe}I{onok XML   (2008-08-19 14:13:00) [56]

procedure Move(const Source; var Dest; Count: Integer);

Description

Move copies Count bytesfrom Source to Dest.


Medbe}I{onok XML   (2008-08-19 14:11:00) [57]

И в чем сакральный смысл передачи муву длины массива минус один?
"Больше строчек кода, веселых и странных"?


Сергей М.   (2008-08-19 14:11:00) [58]


> _koha   (19.08.08 13:49)


Отладчик, конечно же, молчит как партизан ?)


Medbe}I{onok XML   (2008-08-19 14:09:00) [59]

Сдесь так и задумывалось Num-1 это правильное дейстаие

Нужели?


_koha   (2008-08-19 14:08:00) [60]


> Юрий Зотов ©   (19.08.08 13:56) [3]

Num := Length(N);
при самом первом вызове Num = 0 при всех последующих = +1


> Medbe}I{onok XML ©   (19.08.08 13:56) [2]
> move(Buf, N, Num-1);

Сдесь так и задумывалось Num-1это правильное дейстаие


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо