![]() |
| ||
|
|
Новости |
Поиск |
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 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]
> вы здесь диагнозы выдаете только?
И диагнозы ставим, и лечим, и калечим, и Шопена заказываем)
Ты ты про отладчик-то так и не сподобился прояснить ситуацию ...