Форум: "Начинающим";
Текущий архив: 2008.09.28;
Скачать: [xml.tar.bz2];
ВнизПочему это не работает Найти похожие ветки
← →
_koha (2008-08-19 13:49) [0]Компилируется без ошибок, но при работе "падает".
//..............................
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 13:55) [1]
> Move(N[0], Buf[0], Num);
Читай книжки. Изучай динамические массивы.
← →
Medbe}I{onok XML © (2008-08-19 13:56) [2]move(Buf, N, Num-1);
и многое другое тоже изучай.
← →
Юрий Зотов © (2008-08-19 13:56) [3]Первая же строчка:
Num := Length(N);
Чему будет равно Num?
А вообще-то, почему бы не пройти отладчиком и не выяснить точную причину?
← →
Vlad Oshin © (2008-08-19 14:01) [4]N[Num-1]:=num;
← →
Palladin © (2008-08-19 14:03) [5]троянописец млин :)
← →
oldman © (2008-08-19 14:05) [6]
> Юрий Зотов © (19.08.08 13:56) [3]
> Первая же строчка:
> Num := Length(N);
Учитывая, что
N: array of integer;
действительно
"Компилируется без ошибок"?
← →
_koha (2008-08-19 14:08) [7]
> Юрий Зотов © (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 это правильное дейстаие
← →
Medbe}I{onok XML © (2008-08-19 14:09) [8]Сдесь так и задумывалось Num-1 это правильное дейстаие
Нужели?
← →
Сергей М. © (2008-08-19 14:11) [9]
> _koha (19.08.08 13:49)
Отладчик, конечно же, молчит как партизан ?)
← →
Medbe}I{onok XML © (2008-08-19 14:11) [10]И в чем сакральный смысл передачи муву длины массива минус один?
"Больше строчек кода, веселых и странных"?
← →
Medbe}I{onok XML © (2008-08-19 14:13) [11]procedure Move(const Source; var Dest; Count: Integer);
Description
Move copies Count bytes from Source to Dest.
← →
_koha (2008-08-19 14:15) [12]Правильный код
//..............................
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() был уверен, что она с нулевого элемента копирует из масиивов, почему ей явно надо указывать начало массива?
← →
Сергей М. © (2008-08-19 14:18) [13]
> она с нулевого элемента копирует из масиивов
А где ты вообще видишь в прототипе ф-ции Move(), что она работает с массивами, да еще и с динамическими ?
← →
Medbe}I{onok XML © (2008-08-19 14:23) [14]Допустим N = 2
Твой мув скопирует 1 байт.
В то время как любой элемент массива (Integer) состоит из четырех байт.
Ку?
← →
Palladin © (2008-08-19 14:23) [15]
> она с нулевого элемента копирует из масиивов
а ты задумывался о том, что есть идентификатор дин массива?
← →
_koha (2008-08-19 14:24) [16]
> Medbe}I{onok XML © (19.08.08 14:11) [10]
> И в чем сакральный смысл передачи муву длины массива минус
> один?"Больше строчек кода, веселых и странных"?
Очень простой:
вот о меня есть коробок спичек в нем их 10 и одинадцатая не влазит, то я беру такой же коробок (для 10 спичек) и перекладываю списки из первого во второй затем растягиваю первый коробок на +1 спичкуInc(Num);
setlength(N, Num);
и как ты думаешь сколько спичек я должен вернуть их второго коробка?
одинадцать или всетаки (Num-1) десять?
← →
Medbe}I{onok XML © (2008-08-19 14:24) [17]Правильный код
Ага, правильный. Только бессмысленный.
← →
Medbe}I{onok XML © (2008-08-19 14:25) [18]и как ты думаешь сколько спичек я должен вернуть их второго коробка?
одинадцать или всетаки (Num-1) десять?
Move не имеет никакого понятия ни про спички ни про тип Integer
← →
_koha (2008-08-19 14:36) [19]
> Medbe}I{onok XML © (19.08.08 14:24) [17]
</I
> Ага, правильный. Только бессмысленный.
>
Это же модель просто пример, когда код гораздо сложнее и запутанный, то прибегают к простым моделям, для того, чтобы понять их суть. Для тебя он бессмысленный для меня вовсе и не бессмысленный, а будет работать как функция увеличения д.массива на +1
← →
Medbe}I{onok XML © (2008-08-19 14:37) [20]Пациент очень тяжелый. Мы его щас потеряем.
← →
Medbe}I{onok XML © (2008-08-19 14:38) [21]а будет работать как функция увеличения д.массива на +1
Длинна массива увеличится.
А после мува в нем будет мусор.
← →
_koha (2008-08-19 14:44) [22]
>Medbe}I{onok XML © (19.08.08 14:38) [21]
> А после мува в нем будет мусор
А с чего ты взял?
← →
Сергей М. © (2008-08-19 14:45) [23]
> _koha (19.08.08 14:24) [16]
>
>
ПРежде чем городить велосипед, нужно почитать справку.
Там четко и внятно сказано про SetLength:
Existing characters in the string or elements in the array are preserved
Так что все эти твои потуги с мувом попросту бестолковые телодвижения)
← →
Medbe}I{onok XML © (2008-08-19 14:46) [24]Снимись с ручника-то.
Мув копирует не спички, а байты.
Каждая спичка состоит из четырех байт.
← →
Palladin © (2008-08-19 14:48) [25]
> _koha (19.08.08 14:44) [22]
а что там будет по твоему? спички?
← →
Сергей М. © (2008-08-19 14:48) [26]Inc(Num);
SetLength(N, Num);
N[Pred(Num)] := Num;
вгот и весь велосипед)
← →
_koha (2008-08-19 14:56) [27]
> Medbe}I{onok XML © (19.08.08 14:46) [24]
>
> Снимись с ручника-то.
> Мув копирует не спички, а байты.
> Каждая спичка состоит из четырех байт.
Значит и не только байты а еще и элементы массива, незнаю но вот тот код работает и нет там никакого мусора.
← →
Medbe}I{onok XML © (2008-08-19 14:58) [28]и нет там никакого мусора.
Тебе же сказали, что setlenth не портит содержимое массива.
Потому и не мусор.
Замувишь в новый чистый массив, будет мусор.
← →
Сергей М. © (2008-08-19 15:00) [29]Мда..
Далеко пойдет сей троянописец)
← →
_koha (2008-08-19 15:00) [30]setlenth как раз то все и портит!
← →
Medbe}I{onok XML © (2008-08-19 15:00) [31]все. к терапевту.
← →
Сергей М. © (2008-08-19 15:01) [32]
> _koha (19.08.08 15:00) [30]
Эт ты для сокетов что ли массивчик заготавливаешь ?
← →
Amoeba © (2008-08-19 15:01) [33]
> _koha (19.08.08 15:00) [30]
>
> setlenth как раз то все и портит!
Лучше жевать, чем говорить!
LMD!
← →
_koha (2008-08-19 15:02) [34]
> Сергей М. © (19.08.08 15:00) [29]
>
> Мда..
> Далеко пойдет сей троянописец)
а вы и ту ветку видели?
← →
Сергей М. © (2008-08-19 15:02) [35]
> _koha (19.08.08 15:02) [34]
А что ее видеть ?
Она вон до сих пор красуется)
← →
+koha (2008-08-19 15:06) [36]
> Сергей М. © (19.08.08 15:01) [32]
> Эт ты для сокетов что ли массивчик заготавливаешь ?
- К удивлению нет.
← →
Dennis I. Komarov © (2008-08-19 15:07) [37]О уже забанили, а ветка еще висит...
← →
Renegat © (2008-08-19 15:08) [38]> [30] _koha (19.08.08 15:00)
Быть такого не может. SetLength имеет в своей основе GlobalReAlloc. Он автоматически копирует данные из предыдущего блока памяти в только что зарезервированный, если тот большего размера, чем исходный. Если же размер меньше - то вообще ничего никуда не копирует, и память остаётся на месте.
← →
+koha (2008-08-19 15:10) [39]> Сергей М. © (19.08.08 15:02) [35]
вопрос об динамических массивах меня давно интересовал в плане общего развития. Вот решил выяснить все подробности.
← →
Сергей М. © (2008-08-19 15:14) [40]
> решил выяснить все подробности
Что ж ты не обратился за разъяснениями, в первую очередь, к отладчику ?
Отладчик ведь - первый друг, товарищ и брат трояноделов)
А ты почему-то сразу в клинику обратился за диагнозом)
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.09.28;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.043 c