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

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

самопроизвольное изменение переменных [D6, Win95/98]


bobby ©   (2002-10-14 08:48:00) 

Начало происходить самопроизвольное изменение переменных во время выполнения.
Я думаю, что это из-за большого количества глобальных переменных. Может быть такое?
Если да, то как увеличить буфер, для них?


Valt   (2002-10-15 10:52:00) [1]

Народ, хватит базарить!


Digitman   (2002-10-15 10:46:00) [2]

>Anatoly Podgoretsky

>>а код ли виноват

Ну а что ж еще ?) Если не код ?)


Пошляк   (2002-10-15 09:27:00) [3]

Виноваты кривые руки и бестолковая голова - советую их отрезать и пришить новые.


Anatoly Podgoretsky   (2002-10-15 09:02:00) [4]

Я бы предложил и дальше пойтиЮ подумать а код ли виноват?


Digitman   (2002-10-15 08:35:00) [5]

>bobby

>>Значит виновата точно та что объявлена до нее?

Так какая же "та" (переменная - ты имел ввиду) у тебя "виновата", а ? И в чем она "виновата" ?

Сударь, прежде чем упрекать меня в якобы сарказме, выясни для себя для начала, может ли вообще переменная быть в чем-то "виноватой". Или все же именно код "виноват" (тот самый, что выполняет некорректное присвоение CellTextRect[1,0] := .. )


bobby   (2002-10-15 05:45:00) [6]

>У вас где то идет запись в элемент CellTextRect[1,0]
Точно! Спасибо всем огромное!


TTCustomDelphiMaster   (2002-10-14 20:34:00) [7]

У вас где то идет запись в элемент CellTextRect[1,0]
Скорее всего цикл начинается с 0. Ищите.


bobby   (2002-10-14 19:58:00) [8]

......x:type type;
ну это я так глупо объяснил произвольную переменную произвольного типа, потому что кода под рукой небыло.
Сейчас вижу, что там вот что:

var

command: tcommand;
tim: integer;
hnt: THintWindow;
xx,yy: integer;
selRect: trect;
SgCaptionRect: trect;
Column, Row: Longint;
selecting: boolean;
c,r: integer;
gridSelection: tgridrect;
ClickedCol: integer;
ClickedRow: integer;
ClickedRect: TRect;
linkcell: tpoint;

{вот эти переменные изменяются сами}
ResplvedForPaintCell: Tpoint;
ColSizeChanged :boolean;
{/вот эти переменные изменяются сами}

CellTextRect: array[1..100,1..32]of TPoint;
txtwidth: integer;
FileBuf: Tstringlist;
Columns: array [0..32] of TColumn;
ColCount : integer........................
.............. и т.д

к


зы
2Digitman:
>"Виноват" неверный прикладной код, написанный тобой (и на ? каком-то участке выполнения некорректно работающий с переменными), а не переменная (объявленная "до", "после" или где-то еще)...

Доставляет удовольствие язвить? Все поняли, что я имел в виду.


han_malign   (2002-10-14 17:30:00) [9]

для локализации кода портящего другие переменные, надо примерно поймать момент когда это происходит, а потом поставить глобальный breackpoint, на изменение данных и пройтись еще раз - короче, режим отладки не для хакеров делался, а для грамотных программистов.


Юрий Зотов   (2002-10-14 17:11:00) [10]

А вот это:
x:type type;
Это вообще что есть такое?

А то странная какая-то конструкция, мягко говоря.


Digitman   (2002-10-14 17:00:00) [11]


> Значит виновата точно та что объявлена до нее?


"Виноват" неверный прикладной код, написанный тобой (и на каком-то участке выполнения некорректно работающий с переменными), а не переменная (объявленная "до", "после" или где-то еще)...

в Win32 API есть, конечно, некоторые спец.ф-ции, позволяющие отследить обращение к участку памяти со стороны исполняемого кода и выявить адрес памяти процесса, содержащего маш.инструкции, осуществившие при своем выполнении таковое обращение, но - стоих ли этим заниматься ? Не лучше ли строчку за строчкой просмотреть исх.код (второпях, без всесторонней проверки сверстанный когда-то) в поисках "сомнительных" (с т.з. ожидаемого результата) участков исх.текста ?


TTCustomDelphiMaster   (2002-10-14 16:49:00) [12]

А можно поподпобней этот кусочек
......x:type type;


bobby   (2002-10-14 16:38:00) [13]

Как же ЭТО поймать???
Все остальное работает не один месяц уже на 4 компах без глюков.
Единственная зацепка-знаю место в объявлениях глобальных переменных, в которое опасно вставлять новую переменную, она начинает изменятся. Значит виновата точно та что объявлена до нее?

т.е
var
a:integer;
......x:type type;
//-вот здесь что ни объяви, будет глючить.
d:word;


MBo   (2002-10-14 09:06:00) [14]

>Song
Зато наглядно ;)

вот рабочий пример
var
Form1: TForm1;
a:array[0..5] of integer;
b:integer;
implementation
procedure TForm1.Button1Click(Sender: TObject);
begin
b:=6;
a[b]:=1;
caption:=inttostr(b);
end;


Song   (2002-10-14 09:01:00) [15]

2MBo © (14.10.02 08:52)
Чего в самом деле? :-)
Неужели данные в сегменте DS идут непрерывным потоком?


Digitman   (2002-10-14 08:55:00) [16]


> Может быть такое?


Нет


MBo   (2002-10-14 08:52:00) [17]

>думаю, что это из-за большого количества глобальных переменных.
Нет.
Где-то ошибки.
Например
var a:array[0..5] of integer;
b:integer;

если не включено отслеживание Range, a[6]:=1 приведет к изменению b


Наверх

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