![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не могу понять причину
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]
Тогда лучше избавляться от модальных форм? Или может что посоветуете?