Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Прикол какой-то [D7, WinXP]


Shnabs ©   (2004-12-28 19:34:00) 

Привет.
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
i:=i+1;
form1.Caption:=inttostr(i);
end;
Поидее при каждом нажатии кнопки капшн формы должен увеличиваться? А он увеличивается только если переменная i объявляется глобальной. А так капшн равен '9188949'. Почему?


DiamondShark   (2004-12-29 11:10:00) [1]

А... эээ... Это, видимо, вывод для интеллекта явно выше среднего.
"Ниччо не понимаю" (ц)


Sandman25   (2004-12-29 10:58:00) [2]

[17] DiamondShark ©   (29.12.04 10:55)

Логично. Хотя можно сделать и другой вывод - происходит "ошибка" при записи в стек :)


DiamondShark   (2004-12-29 10:55:00) [3]


> И даже если убрать оптимизацию, всё равно число будет одно
> и то же, несмотря на изменение команды на inc dword ptr
> [ebp-$08]

Ну правильно. Программа крутится в регулярном цикле.
Соответсвенно, и мусор в стеке довольно регулярный.
;)


Sandman25   (2004-12-29 10:26:00) [4]

И даже если убрать оптимизацию, всё равно число будет одно и то же, несмотря на изменение команды на inc dword ptr [ebp-$08]


Sandman25   (2004-12-29 10:24:00) [5]

[14] Profi ©   (28.12.04 21:07)

Ситуация еще более интересная - при каждом нажатии кнопки выводится одно и то же число. Потому что inc(i) транслируется в inc(esi)


Profi   (2004-12-28 21:07:00) [6]

Не, ну бывает! Не понимает парень, что он при каждом нажатии иницилицирует i заново, а следовательно в ней лежит мусор (любое число). Он его еще и увеличивает на 1. Ну не может он этого понять :)


begin...end   (2004-12-28 21:06:00) [7]

> Shnabs   (28.12.04 19:34)

Вот отрывок из справки:

If you don't explicitly initialize a global variable, the compiler initializes it to 0. Local variables, in contrast, cannot be initialized in their declarations and contain random data until a value is assigned to them.

Перевод.Если Вы не инициализируете явно глобальную переменную, компилятор инициализирует её в 0. Локальные переменные, наоборот, не могут быть инициализированы в своих объявлениях и содержат случайные данные до тех пор, пока им не будут присвоены значения.


Poirot   (2004-12-28 20:51:00) [8]

а потом скажет, что он реальный программер:) И нас тут буит буквально уличать во всём, в чём только можно:))
Совет на скорую руку: Книжка дельфи для чайников, но лучше всего - Паскаль для "оочень сильно начинающих:))"


Sun bittern   (2004-12-28 20:48:00) [9]

Злые вы все. Опять над новичками стебаеетесь :)


xxxxxxx   (2004-12-28 19:53:00) [10]

Удалено модератором


Fay   (2004-12-28 19:52:00) [11]

2 xxxxxxx   (28.12.04 19:50) [8]
Ну не обратил внимания 8) Эта ветка не располагает к серьёзности.


xxxxxxx   (2004-12-28 19:50:00) [12]

>Tag := Tag + 1;
>form1.Caption:=inttostr(i);
это что еще один бред?
тогда уж inttostr(tag)
и что здесь Tag полноценно заменила i :))))


Poirot   (2004-12-28 19:49:00) [13]

Развод:))))))) это чистый развод:))


Poirot   (2004-12-28 19:48:00) [14]

точно.. оно так и буит в капшене:)
>>Tag := Tag + 1;
>>form1.Caption:=inttostr(i);


Shnabs   (2004-12-28 19:47:00) [15]

Ну, а почему же тогда:
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
i:=1;
form1.Caption:=inttostr(i);
end;
капшн равен '1'.


Fay   (2004-12-28 19:46:00) [16]

>> А он увеличивается только если переменная i объявляется глобальной
Tag := Tag + 1;
form1.Caption:=inttostr(i);


Poirot   (2004-12-28 19:44:00) [17]

Орешник:)))
Не.. ну вообще-то переменная увеличивается:)))
только не так, как задумывалось;)


xxxxxxx   (2004-12-28 19:42:00) [18]

почему, а по кочену :)
по какой он идее должен увеличиваться, если переменная локальная.
и кто иницилицировать i будет? вот и лежит там мусор.
еще не понятно? :)


Fay   (2004-12-28 19:40:00) [19]

Действительно, очень странно! 8)
>> А так капшн равен '9188949'
А чему должен быть равен?


Наверх

Титульная страница Поиск, карта сайта Написать письмо