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

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

Не могу понять причину


Страницы:   1 2

NotBeginer ©   (2006-01-14 11:05:00) 

Доброго времени суток.
Что-то я не пойму. объясните пожалуйсто.
есть цикл: При некоторых условиях он зависает
 for k:=1 to FormMain.QuantityQ do
    begin
      find:=false; - при отладке вот отсюда прыгает в начало цикла, почему так? Код который находится ниже не выполняется
      while not find do
      begin
........
Заметил еще одну особунность
к примеру опять есть цикл

 Count:=0;
 
 for k:=1 to FormMain.QuantityQ do
    begin
          Какой-то код  // после выполнения, пргает не в начало цикла, а то место где находится строка count:=0;


evvcom   (2006-01-16 11:26:00) [1]


> Возможно в редакторе открыт не тот файл (но с таким же именем),
>  что указан в проекте

Тогда трассировка по нему не пойдет.


Fay   (2006-01-16 11:17:00) [2]

evvcom ©   (16.01.06 10:36) [27]
Очень просто. Возможно в редакторе открыт не тот файл (но с таким же именем), что указан в проекте.


evvcom   (2006-01-16 10:36:00) [3]


> Мне в таких случаях помогало удаление *.dsk

А при чем здесь desktop? Как удаление этого файла повлияет на корректировку файла *.pas?


Чапаев   (2006-01-16 10:34:00) [4]


> Решение: загрузить этот файл *.pas, например, в блокноте,
>  внести какие-нибудь изменения (добавить и удалить символ),
>  сохранить, загрузить в Delphi.

Ну не знаю... Мне в таких случаях помогало удаление *.dsk соответствующего проекта.


evvcom   (2006-01-16 10:20:00) [5]


> Говорю же этот код вообще не выполняется (ставлю точку останова
> внутри), цикл выполняет сразу

Иногда (такое бывает) в тексте программы пропадает один из символов в #13#10. Редактор это дело нормально разруливает и мы видим перенос строки, а компилятор (лексический анализатор) этого переноса строки не видит. И в режиме отладки мы видим прыжки по строкам, которые на самом деле в настоящий момент не выполняются.
Решение: загрузить этот файл *.pas, например, в блокноте, внести какие-нибудь изменения (добавить и удалить символ), сохранить, загрузить в Delphi.

>       while not find do
>       begin
>         RandomIndex:=Random(QuestionsCount+4);
>         if (ArrayOfQuestions[randomindex]<>-1)and(RandomIndex>0) then
>         begin
>            ...
>         end;
>       end;

Если условие в if не выполняется, то find нигде не меняется. Вот он и бесконечный цикл.


Плохиш   (2006-01-16 01:18:00) [6]


> NotBeginer   (15.01.06 00:26) [6]
>
>       ShowMessage('lol'); - Вот этот код выполняется каждый
> раз, и цикл зависате :\

Хм, а ты на кнопочку "Ок" в показанном сообщении нажимаешь?


NotBeginer   (2006-01-15 23:08:00) [7]

Ничего не помогло :\
Как гнал, так и гонит
> Проверь, а что за переменная find, не определена ли она
> в проекте несколько раз (как глобальная и локалньная в процедурах
> / функциях)


Нет, данная переменна только в этой процедуре. Больше нигде ее нет


Alarm   (2006-01-15 21:36:00) [8]

Проверь, а что за переменная find , не определена ли она в проекте несколько раз (как глобальная и локалньная в процедурах / функциях)
Ну и кроме того крайне нежелательно пользоваться такими именами (не исключено, что это зарезервированное слово), попробубуй поменять его хотя бы на qwerty


NotBeginer   (2006-01-15 20:21:00) [9]

А что делает эта самая оптимизация? Как она влияет на выполнение кода? Значит из-за этого так получается?
Всем спасибо


Fay   (2006-01-15 11:56:00) [10]

Точно. Старею...


begin...end   (2006-01-15 11:56:00) [11]

> Fay ©   (15.01.06 11:53) [18]

Доллар забыли.
:о)


Fay   (2006-01-15 11:53:00) [12]

NotBeginer   (15.01.06 11:52) [17]
{O-}


NotBeginer   (2006-01-15 11:52:00) [13]


> Оптимизацию кода компилятором, небось, забыл выключить?

:) а можно спросит как ее выключить?
Буду очень благодарен


DrPass   (2006-01-15 01:17:00) [14]


> Говорю же этот код вообще не выполняется (ставлю точку останова
> внутри), цикл выполняет сразу же прыгает на строчку выыше
> цикла, а потом опять в цикл, счетчик не меняется, все время
> остается 1

Оптимизацию кода компилятором, небось, забыл выключить?


Fenik   (2006-01-15 01:03:00) [15]

Может тогда проблема в обращении к FormMain.QuantityQ?
попробуй вот как
 N := FormMain.QuantityQ;
 if N > 0 then
 for k:=1 to N do
 begin
  while not find do


NotBeginer   (2006-01-15 00:50:00) [16]


> Да модальные формы тут не причем.
> Наверное цикл
>   while not find do
>   begin
> бесконечен, т.к. ничего не находится.

Говорю же этот код вообще не выполняется (ставлю точку останова внутри), цикл выполняет сразу же прыгает на строчку выыше цикла, а потом опять в цикл, счетчик не меняется, все время остается 1


Fenik   (2006-01-15 00:45:00) [17]

Да модальные формы тут не причем.
Наверное цикл
  while not find do
  begin
бесконечен, т.к. ничего не находится.


NotBeginer   (2006-01-15 00:44:00) [18]

В том то и дело, что цикл начинает выполняться, но счетчик не изменяется, а коды выполняется тот, который стоит выше самого цикла


VirEx   (2006-01-15 00:41:00) [19]

займись трассировкой, но ведь не сложно поставить брэкпоинт, жми F9, когда дойдёт до брэкпоинта жми F7 (пошаговое выполнение) или F8 (пошаговое выполнение но не будет "углубляться/заходить" в функции/процедуры), вот и увидешь по каким строкам выполняется программа.
когда стоит на брэкпоинте можно посмотреть значение переменной - подведи мышку к переменной, либо надо устанавливать через меню Debug - watch (вроде как)


NotBeginer   (2006-01-15 00:35:00) [20]


> Fenik

)
> VirEx ©   (15.01.06 00:27) [8]


Тогда лучше избавляться от модальных форм? Или может что посоветуете?


Страницы:   1 2

Наверх

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