Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2006.05.07;
Скачать: [xml.tar.bz2];

Вниз

глюк или не глюк   Найти похожие ветки 

 
Parus ©   (2006-04-10 19:17) [0]

Вот такой глюк или не глюк у меня получился:
если вы кнопкой вызовите этот код:

procedure TForm1.Button1Click(Sender: TObject);
var t:tbutton;
begin
if t.Caption=t.Caption then t.caption:="#";

end;

то у кнопки изменится надпись.
_________
Но если код оптимизировать, вот так:

procedure TForm1.Button1Click(Sender: TObject);
var t:tbutton;
begin
t.caption:="#";
end;

то меняется заголовок формы
_________________
ПОЧЕМУ у МЕНЯ такое происходит?
(Borland Delphi 2005 Arhitect Edition )
_________________
зато первый код если вызывать всеми кнопками (одну процедуру) то код меняет надпись у "кликнутой" кнопки.


 
Суслик ©   (2006-04-10 19:18) [1]

жуть :)
t где значение задаешь?


 
Суслик ©   (2006-04-10 19:20) [2]


> зато первый код если вызывать всеми кнопками (одну процедуру)
> то код меняет надпись у "кликнутой" кнопки.

тебе оччень повезло что именно так.


 
Parus ©   (2006-04-10 19:21) [3]


> t где значение задаешь?

Ни где!
____________________
Объясни пожалуста ПОЧЕму это происходит!


 
Мефисто   (2006-04-10 19:30) [4]

BD7
Тоже самое :)


 
Virgo_Style ©   (2006-04-10 19:32) [5]

В Пентагоне думают: почему взорвался правый ускоритель?
В Кремле думают: почему не взорвался левый ускоритель?

Тут надо думать, почему оно вообще как-то работает, а не почему именно так...


 
Суслик ©   (2006-04-10 19:59) [6]


> Объясни пожалуста ПОЧЕму это происходит!

не хочу, т.к. ты не прочел ни одной страницы ни одной книги по дельфи.


 
Мефисто   (2006-04-10 20:26) [7]

Суслик ©   (10.04.06 19:59) [6]

Но факт остается фактом. Почему оно РАБОТАЕТ???


 
Desdechado ©   (2006-04-10 20:57) [8]

совпадение
AV - более вероятно


 
Grom PE ©   (2006-04-10 21:09) [9]

Забавный эдакий хак. Работает и в Delphi 7.
А проще вот как:
procedure TForm1.Button1Click(Sender: TObject);
var t:tbutton;
begin
 t.Caption;
 t.Caption:="#";
end;


 
Gero ©   (2006-04-10 21:40) [10]

> Ни где!

И как ты думаешь, на что указывает t?


 
Rouse_ ©   (2006-04-10 21:54) [11]

Это просто видна работа оптимизатора.
убираются явные ошибки при написании кода...

procedure TForm1.Button1Click(Sender: TObject);
var t:tbutton;
begin
t.caption:="#";
end;


Переменная Т не используется - все что связано с ней изымается, остается:

procedure TForm1.Button1Click(Sender: TObject);
begin
 caption:="#";
end;


 
Мефисто   (2006-04-10 22:00) [12]

>> убираются явные ошибки при написании кода...

Хм... Какой умный. А почему не предупреждает :(


 
jack128 ©   (2006-04-10 22:11) [13]

Мефисто   (10.04.06 22:00) [12]
Хм... Какой умный. А почему не предупреждает :(

Он предупреждает, просто ты читать не умеешь.


 
Sergey Masloff   (2006-04-10 22:22) [14]

jack128 ©   (10.04.06 22:11) [13]
Наверняка хинты и варнинги отключены. 100 против одного что так ;-)


 
EvS ©   (2006-04-10 22:28) [15]

procedure TForm1.Button1Click(Sender: TObject);
var t:tbutton;
begin
t.caption:="#";
end;

[Warning] Unit1.pas(29): Variable "t" might not have been initialized


 
Kerk ©   (2006-04-10 22:30) [16]

Rouse_ ©   (10.04.06 21:54) [11]

За такую "оптимизацию" руки отрывать надо.


 
Marser ©   (2006-04-10 22:32) [17]

> [16] Kerk ©   (10.04.06 22:30)
> Rouse_ ©   (10.04.06 21:54) [11]
>
> За такую "оптимизацию" руки отрывать надо.

Это ещё почему? Там ведь инициализации нет - явная заявка на AV.


 
Kerk ©   (2006-04-10 22:34) [18]

Marser ©   (10.04.06 22:32) [17]
Это ещё почему? Там ведь инициализации нет - явная заявка на AV.


Кто ж против AV? После того чего оптимизатор делает, такую ошибку в большом проекте хрен найдешь.


 
Kerk ©   (2006-04-10 22:38) [19]

Уверен, что дело не в оптимизаторе. Просто совпадение. Надо CPU смотреть чего там в стеке.


 
Marser ©   (2006-04-10 22:39) [20]

> [18] Kerk ©   (10.04.06 22:34)
> Marser ©   (10.04.06 22:32) [17]
> Это ещё почему? Там ведь инициализации нет - явная заявка
> на AV.
>
> Кто ж против AV? После того чего оптимизатор делает, такую
> ошибку в большом проекте хрен найдешь.

Что ж, остается только посетовать, что он не настраиваемый, по крайней мере, в старых версиях.


 
Gydvin ©   (2006-04-10 22:42) [21]

прикольно ))


 
Мефисто   (2006-04-10 22:46) [22]

Sergey Masloff   (10.04.06 22:22) [14]
Неа включены :)

jack128 ©   (10.04.06 22:11) [13]
Блин точно, как-то умудрился проглядеть :( Совсем слепой...


 
Grom PE ©   (2006-04-10 23:08) [23]

Rouse_ ©   (10.04.06 21:54) [11]
А как же быть с моим вариантом [9]?
Тоже t. отбрасывает? А почему тогда # у кнопки становится?


 
Gero ©   (2006-04-10 23:20) [24]

> [11] Rouse_ ©   (10.04.06 21:54)

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


 
Суслик ©   (2006-04-11 11:40) [25]


> Ты бы хоть смайлики ставил, а то народ и впрямь поверил.

он пока не мастер, ему можно так шутить :)


 
Parus ©   (2006-04-11 19:19) [26]


> не хочу, т.к. ты не прочел ни одной страницы ни одной книги
> по дельфи.

Почему???Прочитал...
но про что-то подобное не было ни в одной книге.
А так прочитал немного но ОЧЕНЬ много в этих книгах написанно, что мне и нравиться.
Вот книги(в порядке как они у меня "появлялись"):Delphi 6 учебный курс(я в ней очень часто что-то ищу и НАХОЖУ), Программирование в Delphi глазами хакера,
Delphi в шутку и в серьёз.


 
Хозяин   (2006-04-11 19:23) [27]

[0]
а как ты на такое нарвался вообще?


 
Суслик ©   (2006-04-11 21:35) [28]


> Parus ©   (11.04.06 19:19) [26]


> Программирование в Delphi глазами хакера

сейчас тебя за эту книгу съедят :)

-----------------

Вообще как-то слабо верится, что читал :) Пойми, это даже не ошибки, а основы, даже не основы, а.. даже не знаю, что. Ну типа, как говорить не уметь.


 
Gero ©   (2006-04-12 00:50) [29]

> Вообще как-то слабо верится, что читал :) Пойми, это даже
> не ошибки, а основы, даже не основы, а.. даже не знаю, что.
> Ну типа, как говорить не уметь.

Да ладно, в «глазах хакера» там байты по 9 бит, поэтому все может быть.


 
NightLord ©   (2006-04-12 02:24) [30]

глюк, это делфя неправильно со стеком работает -)
вот пример
procedure TForm1.Button1Click(Sender: TObject);
var
 j:integer;
 T:TButton;
 i:integer;
begin
 j:=0;
 i:=j;
 T.Caption;
 T.Caption:="#";
 i:=j+1;
 if j=0 then Exit;
end;


 
vlad_gri   (2006-04-12 14:16) [31]

Для варианта
procedure TForm1.Button1Click(Sender: TObject);
var t:tbutton;
begin
t.caption:="#";
end;

все понятно.

Развернем процедуру в asm, получиться

TForm1_Button1Click: ; Self:TForm1<EAX> Sender: TObject<EDX>
MOV EDX,"#"
CALL TControl.SetText


для оптимизации в качестве переменной t используется регистр EAX
"#" помещается в регистр EDX так как  Self:TForm1 и Sender: TObject в процедуре не используются а так как t неинициализированна то содержимое
регистра EAX не изменяется т.е. в нем остается Self:TForm1.
Таким образом это все выливается в вызов
TControl.SetText(Self:TForm1<EAX>,"#"<EDX>)

Второй вариант несколько сложней.


 
Игорь Шевченко ©   (2006-04-12 14:22) [32]


> Delphi глазами хакера


Выпученными или красными ?



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

Форум: "Прочее";
Текущий архив: 2006.05.07;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.009 c
8-1134409438
VasRoG
2005-12-12 20:43
2006.05.07
Загрузка bmp


11-1125510817
glesik
2005-08-31 21:53
2006.05.07
Проблема: дублирование кода


15-1144933267
Zxcda
2006-04-13 17:01
2006.05.07
Почему в Access в поле Действительного типа, в значениях...


2-1145298922
que
2006-04-17 22:35
2006.05.07
WriteFile &amp; WriteFileEx


15-1144819024
Fin
2006-04-12 09:17
2006.05.07
Где задавать вопросы?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский