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

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

Битовые переменные


Sholah_Weras ©   (2006-10-26 16:57:00) 

Тут такой косяк. Ест ьпеременная f1, битовая. Обявлена в процедуре потока. При начале выполнения процедуры в нее записывается левое значение (140). Что за чудо-то такое? Пробовал  менять тип переменной и ее место объявления. Один черт, 140 записывается. Почему так?


DrPass   (2006-10-27 23:58:00) [1]


> Sholah_Weras ©   (27.10.06 22:09) [15]

Все так просто и есть. Такие сбои бывают только в двух случаях - если накосячил программист и если битая планка памяти


RASkov   (2006-10-27 23:01:00) [2]

> [13] Sholah_Weras ©   (27.10.06 21:43)


> Не могу понять почему.

И в самом деле чёта непонятка какая-то. Ты б привел поболее своего кода. Мож чеб и надумали.


DiamondShark   (2006-10-27 22:14:00) [3]


> не стоит (такие сининькие слева). Не могу понять почему

потому что компилятор для них не сгенерировал маш. код.

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


DiamondShark   (2006-10-27 22:10:00) [4]


> код с ее использованием не работает

любой код всегда работает.
ты, видимо, хотел сказать, что тебя не устраивает результат работы.

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


Sholah_Weras   (2006-10-27 22:09:00) [5]

2 DrPass
Если бы было все атк просто. Я уже второй день сижу в этом отладчике. Пробовал менять имена и типы переменных. Нуль. Сейчас опять буду пытаться разобраться.


DrPass   (2006-10-27 22:01:00) [6]

Просто так подобных вещей не бывает. Выключи оптимизатор и проверь пошагово.


Sholah_Weras   (2006-10-27 21:43:00) [7]

В программе два таких цикла. В одном f1 и n, в другом f2 и n2. В первом случае Inc(f2,2) и Break выполняются, а во втром даже точек прерывания напротив Inc(f1,2) и Break не стоит (такие сининькие слева). Не могу понять почему.


DrPass   (2006-10-27 21:21:00) [8]

Глюков нет -  есть ошибки в программе. Этот код ничего никому не говорит. Что у тебя в переменных, что должно происходить, и что тебя не устраивает?


Sholah_Weras   (2006-10-27 20:59:00) [9]

Решил все-таки, что со звездами хутки плохи. Все переменные инициализировал. Только вот штука в том, что в f1 записывается что надо (0 для начала) и код с участием этой переменной выполняется. А есть у меня еще такая переменная f2, тоже byte. Тоже нуль прописывается, но вот код с ее использованием не работает.

for j:=0 to 9 do              //для f1 все абсолютно идентично, разве что
 begin                          //не n1 используется, а n.
  if XY[f2] > n1 then
  begin
   Inc(n1,30);
   Inc(k1);
  end
  else
  begin
   Inc(f2,2);
   Break;
  end;
 end;

Думал-думал, что за глюки такие, так к ничему и пришел.


Anatoly Podgoretsky   (2006-10-26 23:56:00) [10]


> Я имел ввиду, byte.

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


Leonid Troyanovsky   (2006-10-26 22:11:00) [11]


> Sholah_Weras ©   (26.10.06 16:57)

> Тут такой косяк. Ест ьпеременная f1, битовая. Обявлена в
> процедуре потока. При начале выполнения процедуры в нее
> записывается левое значение (140). Что за чудо-то такое?


Поверим на слово, что 140.
Ну, а проблема-то в чем?

--
Regards, LVT.


Desdechado   (2006-10-26 22:02:00) [12]

Инициализировать - это присваивать в начале процедуры какое-то значение по умолчанию, которое потом можно интерпретировать.


Sholah_Weras   (2006-10-26 21:59:00) [13]

2 Anatoly Podgoretsky
Я имел ввиду, byte.
2 Сергей М
Поглумились? Помогли советом? Респект и уважуха за такую помощь.
2 Desdechado
Инициализировать? Как так, покажите пожалуйста на примере.


Desdechado   (2006-10-26 17:39:00) [14]

Всем давно известно, что переменные перед использованием нужно инициализировать.


palva   (2006-10-26 17:25:00) [15]

Переменная объявлена внутри процедуры - значит локальная - значит память под нее выделяется в стеке - а в этой памяти было что-то записано раньше - оказалось 140.


Сергей М.   (2006-10-26 17:05:00) [16]


> Ест ьпеременная f1, битовая


Косяк. (*)


> Обявлена в процедуре потока


см. (*)


> левое


Бывает и правое.


> Что за чудо-то такое?


Восьмое чудо) .. Известно ж)..


> Пробовал  менять тип переменной и ее место объявления


Пробуй еще .. авось "заработает" ..


> Почему так?


потомушта


Elen   (2006-10-26 17:04:00) [17]


>  Ест ьпеременная f1, битовая

Byte? (некоторые ее читаюк как "бите")


Anatoly Podgoretsky   (2006-10-26 16:59:00) [18]

В Дельфи нет битовых переменных


Anatoly Podgoretsky   (2006-10-26 16:59:00) [19]


> Один черт, 140 записывается. Почему так?

Так звезды сложились


Наверх

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