3 / 2 / 1
Регистрация: 14.06.2014
Сообщений: 52
|
||||||
1 | ||||||
При чтении cbInQue из структуры COMSTAT Ошибка Access violation02.09.2021, 17:03. Показов 1927. Ответов 7
Метки нет (Все метки)
Пытаюсь определить сколько байт пришло на ком порт и вываливается Access Violation. В остальном проблем нет, порт открывается, в него данные пишутся, принимаются. Но что бы верно принимать данные, мне необходимо знать сколько байт в буфере. Обыскал форум и гугл, у многих ClearCommError возвращает COMSTAT структуру из которой они спокойно читают cbInQue. У меня же ошибка всегда. Делфи 6, вин 7 x64
Естественно в основном разделе Var юнита я объявляю laserCOMStat:PComStat;
0
|
02.09.2021, 17:03 | |
Ответы с готовыми решениями:
7
При попытке присвоить полям новой структуры значений типа AnsiString появляется ошибка Access Violation При чтении вектора из файла, открытого как бинарник - выскакивает Access violation writing location 0xFEEEFEEE Деструктор структуры. Ошибка: Access violation reading location Ошибка при Parent - нестабильная ошибка Access Violation Ошибка Access Violation при записи |
Native x86
5520 / 3277 / 936
Регистрация: 13.02.2013
Сообщений: 10,432
|
|
02.09.2021, 18:30 | 2 |
Судя по синтаксису вызова ClearCommError, переменная laserCOMStat является глобальным (зачем?) указателем (зачем?), память под который никто предварительно не выделил.
Почему не объявить локальную переменную laserCOMStat: COMSTAT и не передать указатель на нее ClearCommError(laserPort, errorsData, @laserCOMStat)
0
|
3 / 2 / 1
Регистрация: 14.06.2014
Сообщений: 52
|
|
02.09.2021, 21:46 [ТС] | 3 |
Думаю я понял свою ошибку. Я пытался передавать как аргумент функции саму переменную, а не указатель на структуру. Завтра проверю и увижу результат.
0
|
3 / 2 / 1
Регистрация: 14.06.2014
Сообщений: 52
|
||||||
03.09.2021, 18:07 [ТС] | 4 | |||||
Действительно, когда я в функции начал использовать указатель на переменную
Я не совсем понимаю почему структуру нельзя использовать глобально, но проблему я решил.
0
|
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,253
|
|
03.09.2021, 20:30 | 5 |
0
|
Модератор
|
|
04.09.2021, 05:26 | 6 |
А Вы текст сообщения хоть перевели? Неужели непонятно, что к Вашей "структуре" это не имеет никакого отношения? Тут Вам говорится, что переменная-счетчик цикла for должна быть локальной в процедуре - не более того.
0
|
3 / 2 / 1
Регистрация: 14.06.2014
Сообщений: 52
|
|
04.09.2021, 15:47 [ТС] | 7 |
D1973, Да, спасибо, как то не обратил внимания на сам текст сообщения, оно и правда относилось к циклу и даже не влияло на компиляцию и работу. т.к. сказать варнинг, а не эрор.
Относительно COM порта же ошибка крылась вот здесь потому как объявлять надо было laserCOMStat:ComStat и вот в этом случае, уже будет сообщение о несоответствии типов: Код
[Error] Unit1.pas(783): Incompatible types: '_COMSTAT' and 'PComStat' Код
ClearCommError(laserPort, errorsData, laserCOMStat)
0
|
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,253
|
|
04.09.2021, 15:56 | 8 |
Ничего странного. Откуда она может узнать была ли выделена память для этой структуры или нет? Она просто заполняла некую область памяти данными в соответствии с переданным ей указателем. И если указатель указывал на область памяти не принадлежащую данному процессу, возникало AV. А если эта область памяти принадлежала процессу, AV не было.
1
|
04.09.2021, 15:56 | |
04.09.2021, 15:56 | |
Помогаю со студенческими работами здесь
8
Ошибка Access Violation при записи Ошибка Access violation при открытии файла Ошибка access violation при работе с паролем TList. Ошибка Access Violation при создании. Ошибка 'Access Violation' при освобождении потока Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |