Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.02.12;
Скачать: 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 вся ветка

Текущий архив: 2006.02.12;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.063 c
2-1138106373
Split
2006-01-24 15:39
2006.02.12
DBGrid


15-1137903654
SPeller
2006-01-22 07:20
2006.02.12
Переход с ворованной версии софта на лицензионную


4-1133257179
баклан
2005-11-29 12:39
2006.02.12
Нажатие кнопок, вводе текста и прочее...


15-1137610393
Corben-D
2006-01-18 21:53
2006.02.12
Помогите запрограмировать кнопку віключения компа


1-1136939802
plop
2006-01-11 03:36
2006.02.12
Visio + Delphi