![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Почему это не работает
_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это правильное дейстаие