![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
что за глюк !
Лом © (2006-01-27 04:14:00)подскажите что у меня за глюк ...
пишу
procedure TForm1.Button1Click(Sender: TObject);
var
f: array [0..3] of integer;
i:integer;
begin
for i:=0 to 3 do memo1.Lines.Add(IntToStr(f[i]));
end;
получаю в мемо строки
1242708
2010419711
4207223
4361244
как??? ведь массив только создан все элементы должы же быть равны 0
begin...end (2006-01-27 08:02:00) [1]> Джо © (27.01.06 05:47) [7]
Ну дело-то не только в этом, а ещё и в том, что для динамических массивов предусмотрена автоматическая инициализация выделяемых областей нулями.
Джо (2006-01-27 05:50:00) [2]> [6] лом (27.01.06 05:47)
> и тоже самое нужно делать для каждой переменной ?
А зачем это НУЖНО делать, позволь поинтересоваться?
лом (2006-01-27 05:47:00) [3]и тоже самое нужно делать для каждой переменной ?
интерестно почему Борлан не автоматизировал данный процесс
Джо (2006-01-27 05:47:00) [4]> [4] ЮЮ © (27.01.06 05:43)
Разумеется, ибо память под динамические массивы выделяется не на стеке.
ЮЮ (2006-01-27 05:43:00) [5]А можно и так:
procedure TForm1.Button1Click(Sender: TObject);
var
f: array of integer; // или TIntegerDynArray из модуля Types
i:integer;
begin
SetLength(f, 4); // вот тепкрь имеем массив из 4х элементов равных нулю
for i := 0 to 3 do memo1.Lines.Add(IntToStr(f[i]));
end;
лом (2006-01-27 05:43:00) [6]ну прям открытие для меня ... ни в одной программе исходнике никогда такого не видел ... да ... надо выспаться и во всем разобраться
Джо (2006-01-27 05:32:00) [7]> [2] лом (27.01.06 05:25)
> так что для каждого массива созданного локально нужно постояно
> делать операцию типа
> for i:=low(массив) to High (массив) do массив[i]:=0;?
Можно, но не обязательно.
Быстрее будет что-то вроде такого:
ZeroMemory(@f,SizeOf(Integer)*Length(f));
лом (2006-01-27 05:25:00) [8]так что для каждого массива созданного локально нужно постояно делать операцию типа
for i:=low(массив) to High (массив) do массив[i]:=0;?
Джо (2006-01-27 04:28:00) [9]> 4361244
> как??? ведь массив только создан все элементы должы же быть
> равны 0
Неверная предпосылка. Не должны. Локальные переменные вообще-то располагаются на стеке программы, соответственно, там может быть любой "мусор".