Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1219108231
Abcdef123
2008-08-19 05:10
2008.09.28
настройка среды Delphi 2007


3-1207037596
Karburator
2008-04-01 12:13
2008.09.28
отменить добавление записи в триггере


15-1217733481
PZ
2008-08-03 07:18
2008.09.28
День железнодорожника


2-1218794934
workbench
2008-08-15 14:08
2008.09.28
OnKeyUp


15-1217784260
Украинец
2008-08-03 21:24
2008.09.28
Адаптер COM-порта для Notebook рабьотающий под DOS





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский