Вниз
Скачать: 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
8-1125922529
Grant
2005-09-05 16:15
2006.02.12
AVI в Delphi.


2-1137961444
Dormidont
2006-01-22 23:24
2006.02.12
Установка курсора в RichEdit


3-1134382045
Devil2005
2005-12-12 13:07
2006.02.12
JPEG + Access + Delphi


15-1138010046
Control9
2006-01-23 12:54
2006.02.12
Как можно создать сеть с помощу мобильников


15-1137706321
Сергей2
2006-01-20 00:32
2006.02.12
1C:Enterprise 8.0




   Наверх