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 16:29:00) [1]


> ничего не копировало вообще


Да нифига ты не "розибралси")

Мув не копирует как минимум в одном случае - когда Num = 0


oldman   (2008-08-19 16:28:00) [2]

А почему _koha стал +koha?
Забанили, что ли?


+koha   (2008-08-19 16:22:00) [3]

"розибралси"  все-таки, извеняйте за мое занудство.....

move(Move(N[0], Buf[0], Num) ничего не копировало вообще ни в Buf ни в N, а работало потому как вы и говорили setlength(N, num) ничего не ломал.


oldman   (2008-08-19 16:13:00) [4]


> Medbe}I{onok XML ©  


Плюнь, пациента мы таки потеряли...


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

Отладчик говорит, что Move() все-таки копирует элементы массива.

var pInt : PInteger; i : integer;
begin
New(pInt);
i := 777;
Move(i,pInt^,SizeOf(i));
ShowMessage(IntToStr(pInt^));

ShowMEssage('Спичка содержит ' + IntToStr(SizeOf(i)) + ' байт');
end;

Где здесь массив, с элементами которого работал бы мув?
Или  как он догадался, что массива нет?


+koha   (2008-08-19 16:09:00) [6]

>Сергей М. ©   (19.08.08 16:05) [60]

> Разницу осюсяешь ?


- "осюсяю"  картинка отменяется.


Сергей М.   (2008-08-19 16:05:00) [7]


> koha


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 * SizeOf(N[0])); // компенсирующая бочка мёда
Inc(Num);
setlength(N, 0); // бочка дегтя
setlength(N, Num);
move(Buf[0], N[0], (Num-1) * SizeOf(Buf[0])); // еще одна компенсирующая бочка мёда
N[Num-1]:=num;
for num:=0 to Length(N)-1 do
 memo1.Lines.Add(IntToStr(N[num]));
memo1.Lines.Add('----------------------------');


То же самое бестолковое "гониво" данных тудя-сюда, но корректное с т.з. логики.

Разницу осюсяешь ?


Medbe}I{onok XML   (2008-08-19 16:04:00) [8]

Ща картинку сброшу. Отладчик говорит, что Move() все-таки копирует элементы массива.

пример из [49] не убедил?


Сергей М.   (2008-08-19 15:57:00) [9]


> Причем это работает


Кто работает ? Бочка дёгтя ?
Не работает она, на то она и бочка - ни "глобально", ни тем более "локально")


> а если локальные, то нет, почему?


Потому что разное время жизни.


+koha   (2008-08-19 15:54:00) [10]


> Сергей М. ©   (19.08.08 15:48) [5


> setlength(N, 0); // бочка дегтя в твою ложку мёда)

Причем это работает, если массивы глобальные-переменные, а если локальные, то нет, почему?


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


> Отладчик говорит, что Move() все-таки копирует элементы
> массива


Я вообще-то о той "версии", которая у тебя "падает") ..


+koha   (2008-08-19 15:51:00) [12]


> Сергей М. ©   (19.08.08 15:24) [47]
>
> Ты ты про отладчик-то так и не  сподобился прояснить ситуацию
> ...


Ща картинку сброшу. Отладчик говорит, что Move() все-таки копирует элементы массива.


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


> +koha   (19.08.08 15:24) [46]


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, 0);// бочка дегтя в твою ложку мёда)
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('----------------------------');


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

А неважно.

Важно. Так рождаются легенды про мув работающий с элементами массива.


Сергей М.   (2008-08-19 15:42:00) [15]


> Часть копии.


А неважно.
Копия она и в Африке копия)


Medbe}I{onok XML   (2008-08-19 15:39:00) [16]

Потому что копию туда-сюда гоняет.

Часть копии.


Сергей М.   (2008-08-19 15:37:00) [17]


> вопреки всякой логики работает


Потому что копию туда-сюда гоняет.
Абсолютно бессмысленная работа тобой выполняется)


Терапевт   (2008-08-19 15:36:00) [18]

var a,b : array of integer; i : integer;
begin
SetLength(a,3);

a[0] := maxint;
a[1] := pred(maxint);
a[2] := pred(pred(maxint));

SetLength(b,3);
Move(a[0],b[0],3);
//копирование "спичек"
for i := 0 to Pred(Length(b)) do ShowMessage(Format('a = %d b= %d',[a[i],b[i]]));

//Порча памяти сетленсом
SetLength(a,4);
for i := 0 to Pred(Length(a)) do ShowMessage(Format('a = %d',[a[i]]));
end;


Medbe}I{onok XML   (2008-08-19 15:26:00) [19]

Объясни.

за этим не сюда. терапевт в соседней палате обход делает.


Сергей М.   (2008-08-19 15:24:00) [20]


> вы здесь диагнозы выдаете только?


И диагнозы ставим, и лечим, и калечим, и Шопена заказываем)

Ты ты про отладчик-то так и не  сподобился прояснить ситуацию ...


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

Наверх

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