![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Непонятная мне странность. [D5, Win2k]
Unknown user © (2005-02-02 19:08:00)Привожу код:
//вычисляет индекс параграфа и символа после перемещения в направлении Dir
procedure CalcNextCharInd(Dir:TCaretMove; const NowParaInd,NowChrInd:integer;var NextParent:TTextItem; var NextParaInd,
NextChrInd,NextCellInd:integer);
var PrInd,ChInd,LnInd,FrInd,CelInd,
RwInd,ClInd,ChHeight,ChWidth:integer;
ChPos:TPoint;
Prnt:TTextItem; Tbl:TTableItem;
label LeftRepeatCalcPara,
RightRepeatCalcPara,
UpRepeatCalcPara,
DownRepeatCalcPara;
begin
//точка 1
Prnt:=FTextItem; PrInd:=NowParaInd; ChInd:=NowChrInd;
NextParent:=Prnt; NextParaInd:=PrInd; NextChrInd:=ChInd;
//точка 2
.
.
.
end;
Вызывается эта процедура так:
CalcNextCharInd(ADir,FTo.ParaInd,FTo.CharInd,Itm,
NewTo.ParaInd,NewTo.CharInd,NewTo.CellInd);
//точка 3
и при этом NextParent,NextParaInd,NextChrInd,NextCellInd содержат в точке 1 совершенно нереальные,огромные значения, которые не изменяются и в точке 2, хотя определены до вызова процедуры. Эти значения не случайны, при каждом новом старте они повторяются. В точке 3 вижу уже измененные настоящие значения, но для NewTo.CharInd при определенных условиях оно отличается от назначенного в CalcNextCharInd на 1. Из-за чего такое может быть?
Unknown user (2005-02-03 09:51:00) [1]А как объяснить такое поведение компилятора? Если переменная не используется после записи в нее значения то в целях оптимизации компилятор может это значение и не записывать, но тут переменные используются. В чем же дело?
Александр Иванов (2005-02-03 09:44:00) [2]Было - алгоритмическая ошибка
Unknown user (2005-02-03 09:42:00) [3]У кого-то было нечто подобное?