Форум: "Прочее";
Текущий архив: 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.012 c