Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.03.18;
Скачать: CL | DM;

Вниз

Acces violation в условии цикла repeat - until   Найти похожие ветки 

 
EsKor   (2002-03-04 10:42) [0]

Может ли кто-нибудь подсказать почему при реализации кода указанного ниже возникает сообщение:
Access violation at address 0049D053 in module "EXPERTACT.EXE". Read of address FFFFFFFF.

procedure ...
var
Response : String;
...
repeat
Response := Receiving(hCOMPort); //Принять ответ
if Response <> "" then
if Response[1] = "S" then //Если в ответе 1-й символ S, то
begin //связь с весами установлена
TimerWaitResponse.Enabled := false; //остан.таймер ожид.соедин
imgConnect.Visible := true; //отобразить соединение
Sending(hCOMport, "D HELLO"); //вывести на дисплей "HELLO"
TimerAfterHello.Interval := 1500; //установить время таймера
TimerAfterHello.Enabled := true; //запуст.таймер сброса весов
end;
Application.ProcessMessages;
until EndOfWaitResponse or (Response[1] = "S");
...
end; {procedure}
EndOfWaitResponse глобальная переменная типа boolean.

Такое сообщение стало появляться после добавления в условие прекращение цикла or (Response[1] = "S"). Причем код из цикла можно вообще убрать (сделать пустой цикл), но ошибка не устраняется. Можно, конечно, обойтись без этой второй части условия, но, сами понимаете, и при такой реализации ошибки быть не должно.


 
Sasha9 ©   (2002-03-04 10:48) [1]

а что за функции такие Receiving и Sending


 
Alx2 ©   (2002-03-04 10:53) [2]

Пусть Response="", а в until проверяем Response[1]?


 
EsKor   (2002-03-04 10:55) [3]

Функции Receiving и Sending - это собственноручно написанные: первая - прием данных от внешнего устройства, вторая - передача ему необходимых команд. Но, как я уже указал, что если даже цикл будет пустой, то ошибка все равно появляется.


 
Aleksandr ©   (2002-03-04 10:55) [4]

При обращении к первому символу в строке нулевой длины возникает ошибка доступа к памяти - ее там нет...


 
Shaman_Naydak ©   (2002-03-04 11:02) [5]

Ошибка возникает в случае Resonse = ""
Тогда условие в Until Response[1] = "S" абсолютно некорректно.
Методы лечения:
1. Убить эту херню из until"a, а if на Response[1] = "S" закончить break;

2. until EndOfWaitResponse or
((Response <> "") and (Response[1] = "S"));



 
EsKor   (2002-03-04 11:04) [6]

Всем спасибо! Попался на невнимательности, можно сказать даже на глупости. Действительно в общем случае, при первом обращении, с весов ничего не приходит и строка пустая, тем более, что ранее в коде она пустотой и инициализируется... И посему получил пыльным мешком по голове :o).



Страницы: 1 вся ветка

Текущий архив: 2002.03.18;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.014 c
4-57558
BWG
2002-01-14 19:00
2002.03.18
E-Mail & Winsock.


4-57551
gluka
2002-01-16 06:22
2002.03.18
LogonUser,.......CreateProcessAsUser ??? Est problems...


14-57524
Wonder
2002-02-01 16:44
2002.03.18
Отвлечемся? :)


1-57392
AlexMey
2002-03-01 15:33
2002.03.18
Можно ли отчёт QReport экспортировать в Word?


1-57344
snoup
2002-03-04 12:41
2002.03.18
мне для чата надо что бы были смайлики их я хочу выразить ввиде TImage затем когда ты кликаешь на TImage её картинка переходит с твоим сообщением в TRichEdit как это сделать