Вниз
Скачать: CL | DM;

что за глюк !   Найти похожие ветки 

← →
Лом   (2006-01-27 04:14) [0]

подскажите что у меня за глюк ...
пишу

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


← →
Джо ©   (2006-01-27 04:28) [1]

> 4361244
> как??? ведь массив только создан все элементы должы же быть
> равны 0

Неверная предпосылка. Не должны. Локальные переменные вообще-то располагаются на стеке программы, соответственно, там может быть любой "мусор".


← →
лом   (2006-01-27 05:25) [2]

так что для каждого массива созданного локально нужно постояно делать операцию типа
for i:=low(массив) to  High (массив) do массив[i]:=0;?


← →
Джо ©   (2006-01-27 05:32) [3]

> [2] лом   (27.01.06 05:25)
> так что для каждого массива созданного локально нужно постояно
> делать операцию типа
> for i:=low(массив) to  High (массив) do массив[i]:=0;?

Можно, но не обязательно.
Быстрее будет что-то вроде такого:
ZeroMemory(@f,SizeOf(Integer)*Length(f));


← →
ЮЮ ©   (2006-01-27 05:43) [4]

А можно и так:

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) [5]

ну прям открытие для меня ... ни в одной программе исходнике никогда такого не видел ... да ... надо выспаться и во всем разобраться


← →
лом   (2006-01-27 05:47) [6]

и тоже самое нужно делать для каждой переменной ?
интерестно почему Борлан не автоматизировал данный процесс


← →
Джо ©   (2006-01-27 05:47) [7]

> [4] ЮЮ ©   (27.01.06 05:43)

Разумеется, ибо память под динамические массивы выделяется не на стеке.


← →
Джо ©   (2006-01-27 05:50) [8]

> [6] лом   (27.01.06 05:47)
> и тоже самое нужно делать для каждой переменной ?

А зачем это НУЖНО делать, позволь поинтересоваться?


← →
begin...end ©   (2006-01-27 08:02) [9]

> Джо ©   (27.01.06 05:47) [7]

Ну дело-то не только в этом, а ещё и в том, что для динамических массивов предусмотрена автоматическая инициализация выделяемых областей нулями.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.025 c
15-1138195910
Petr V. Abramov
2006-01-25 16:31
2006.02.12
Хочу создать ветку


2-1137969372
Mad_Bob
2006-01-23 01:36
2006.02.12
Одни и те же процедуры, а эффект разный


15-1137960823
Udaff
2006-01-22 23:13
2006.02.12
Замучился уже


5-1124952162
DimaBr
2005-08-25 10:42
2006.02.12
TFontProperty.Edit;


3-1134395315
Курдль
2005-12-12 16:48
2006.02.12
Нужен аналог "...TABLE_1 left outer join (TABLE_2, TABLE_3) on ..




   Наверх