|
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 37
|
||||||
Операция delete вызывает ошибку Access violation at address30.04.2014, 15:28. Показов 6820. Ответов 39
Метки нет (Все метки)
Доброго времени суток, уважаемые форумчане!
Компьютер HP omnibook xe4100, Mobile Intel Celeron 1.14ГГц, ОЗУ 480Мб ОС Windows XP SP2. Borland C++ Builder 6. Программист на уровне "Hello World" + хаотичный набор знаний о типах данных, функциях и указателях) Имеется некое устройство - лазерный 2D сканер RF625 белорусской фирмы RIFTEK. Сканер подключен к компьютеру через Ethernet напрямую кабелем. Фирма прислала исходник программы на С++, а также необходимые библиотеки для работы со сканером. Данный исходник успешно компилируется в Borland C++ Builder 6, подключается к сканеру по TCP/IP, получает от сканера данные и отключается, используя функции из фирменной библиотеки. Прорамма умеет работать одновременно с несколькими сканерами в сети. Однако в конце программы (примерно 100 строка) имеется операция delete vRF625.back(), которая поначалу вызывала ошибку (версия программы с визуальными компонентами - на форме с кнопкой) Access violation at address 00344001 in module 'RFDEVICE.DLL'. Write of address C08CAE7C а теперь (то же самое написал под консоль) подвешивает билдер и саму программу (процессор загружается на 70 и 30% соответственно). Пробовал компилировать на другом компьютере с Windows 7 - эффект аналогичный - зависает на операции delete vRF625.back(). Производитель ответил, что у них подобная ошибка не возникает, всё работает нормально. Но компилируют в CodeGear RAD Studio 2009 C++ Builder 2009. Если удалить операцию delete vRF625.back(), то программа (если функцию запустить в цикле) начинает потихоньку кушать память. Каким методом можно выявить причину возникновения ошибки и зависания? Или, может быть, кто увидит очевидную ошибку в коде? Ведь исполнить это не получится из-за отсутствия сканера )
http://www.cplusplus.com/reference/vector/vector/ vector::back http://www.cplusplus.com/reference/vector/vector/back/ vector::pop_back http://www.cplusplus.com/reference/vector/vector/pop_back/
0
|
||||||
| 30.04.2014, 15:28 | |
|
Ответы с готовыми решениями:
39
Помогите устранить ошибку: Access violation at address Ошибка access violation at address in module borlndmm.dll write of address Access violation at address 00404083 in module 'Projectl.exe'. Read of address 00000000. |
|
91 / 91 / 22
Регистрация: 02.07.2013
Сообщений: 332
|
||||||
| 21.05.2014, 12:53 | ||||||
|
npp, я ж уже писал...
1
|
||||||
|
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 37
|
|
| 22.10.2014, 15:02 [ТС] | |
|
easter, добрый день! Возвращаюсь к теме. Попробовал скомпилировать свой проект с Вашей библиотекой Project1.dll, созданной в C++Builder - операция delete vRF625.back по-прежнему во время исполнения вызывает ошибку Access Violation at address 001E3FDE... Причём Ваш Project1.exe работает без ошибок.
Ранее переустановил Windows7, установил CodeGear C++ Builder 2007 Lite, установил любимый C++Builder 6. Кое-что обнаружил. Создал с нуля и скомпилировал программу в CodeGear C++, заработала без ошибок. В настройках проекта в разделе Linking установил галочку Dynamic RTL, ошибка на операции delete vRF625.back вновь появилась. Убираю галочку, программа отрабатывает без ошибки. Перебрал все галочки по одной в настройках - на ошибку влияет только Dynamic RTL. В C++Builder такой фокус не прошёл - ошибка есть независимо от галки Use dynamic RTL. И независимо от режимов Debug/Release.
0
|
|
|
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 37
|
||||||
| 23.10.2014, 16:41 [ТС] | ||||||
|
c0rvax, Попробовал Ваш код в C++Builder, который в сообщении #21, работает без ошибок, коннект со сканером, дисконнект происходит успешно, но кушает память. За 480 циклов (по 3 секунды) занимаемая программой память возросла с 760 кБ до 888 кБ скачками по 4 кБ.
0
|
||||||
|
91 / 91 / 22
Регистрация: 02.07.2013
Сообщений: 332
|
|
| 23.10.2014, 20:05 | |
|
npp, на самом деле, это твой код :-) Я лишь заменил динамическое выделение памяти на статическое. Есть мнение, что если внести Initialize и CleanUp внутрь цикла, то память кушаться не будет. В любом случае, это лучше, чем Access Violation... И как ни крути, это косяк разработчиков.
0
|
|
|
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 37
|
||||||
| 24.10.2014, 10:23 [ТС] | ||||||
|
Avazart, утечка недопустима, посмотрите мой пост #17 (последний абзац).
c0rvax, утечка есть во всех трёх вариантах зацикливания программы.
0
|
||||||
|
91 / 91 / 22
Регистрация: 02.07.2013
Сообщений: 332
|
|
| 24.10.2014, 11:24 | |
|
npp, тогда такой вариант. Предлагаю вынести весь код в отдельную функцию и вызывать её в цикле из main, а в самой функции цикл не делать, естественно.
0
|
|
|
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 37
|
||||||
| 30.10.2014, 12:42 [ТС] | ||||||
|
c0rvax, попробовал, жрёт память всё равно. Если сканер в сети есть, то жрёт. Если нету - не жрёт.
Avazart, пробовал. Самые первые их библиотеки не подошли, т.к. были скомпилированы для Visual C. Это я выяснил в Интернете, на правильность вывода не претендую. Линковщик выдавал ошибку [Linker error]`…RFDevice.lib contains invalid OMF record, type 0x21 (possibly COFF) Попытка конвертирования библиотеки с помощью утилиты coff2omf.exe от Borland результата не принесла (получается файл нулевого размера). По моей просьбе производитель скомпилировал библиотеку для C++Builder, которая заработала, но описанными в шапке темы проблемами.
0
|
||||||
|
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 37
|
|
| 12.12.2014, 08:34 [ТС] | |
|
Avazart, предыстория такова: купили лазерный сканер RF625 ф. Riftek, я скачал библиотеки с их сайта, подключил их, попробовал скомпилировать в С++, линковщик выдал ошибку
[Linker error]`…RFDevice.lib contains invalid OMF record, type 0x21 (possibly COFF) в Инете нашёл, что эта ошибка из-за того, что библиотека написана не для С++ (а для Visual C) и её надо конвертировать для С++. Тогда Riftek прислал библиотеку для С++, которая заработала, но с ошибкой, озвученной в топике. Параллельно программированием сканера занялся программист на Delphi, не знаю какую он там скачал с сайта, но у него библиотека нормально заработала, память не кушает. Мне нужно такую же программу написать на С++, чем я и занимаюсь, когда настроение есть. P.S. До этого я писал аналогичную программу, но для старых версий сканера RF620, которые в данный момент успешно работают в производстве. Библиотеки там были конечно другие.
0
|
|
|
327 / 230 / 55
Регистрация: 30.05.2014
Сообщений: 682
|
||
| 12.12.2014, 09:42 | ||
|
Добавлено через 11 минут На чем основана уверенность разработчика в том, что класс, экспортированный из dll собранной одним компилятором, будет корректно работать в приложении, собранном другим мне лично пока абсолютно не понятна. Пишите обертку - dll на CodeGear с plain С интерфейсом, в ней создавайте/уничтожайте объект и транслируйте plain С вызовы в вызовы методов класса. Так изначально выглядит SDK большинства адекватных производителей.
0
|
||
| 12.12.2014, 10:05 | ||
|
0
|
||
|
|
|||||||
| 12.12.2014, 13:06 | |||||||
|
demmax2004,
0
|
|||||||
|
327 / 230 / 55
Регистрация: 30.05.2014
Сообщений: 682
|
||
| 12.12.2014, 13:30 | ||
|
implib -a libname.lib libname.dll coff2omf - более для статических
0
|
||
|
327 / 230 / 55
Регистрация: 30.05.2014
Сообщений: 682
|
|
| 12.12.2014, 13:45 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 37
|
||||||
| 03.06.2015, 12:27 [ТС] | ||||||
|
Здравствуйте! Чёрт с ним, с жором памяти, теперь другая проблема:
В строке 43 имеется вызов функции получения данных со сканера scanner.GetResult(&lpBuffer);. Если закомментировать её, то программа компилируется, запускается и отрабатывает нормально. Если раскомментировать её, то при нажатии в C++Builder 6 кнопки RUN на мгновение появляется окно консоли и сразу исчезает, программа не отрабатывает (в конце есть пауза Sleep(2000), я бы заметил результат работы программы. Если нажать Compile или Build, то компилирование происходит успешно с соответствующим сообщением ОК, скомпилированным количество строк и т.д. Если внести в программу ошибку, то компилятор видит её. Ещё заметил, что компилятор перестал предупреждать об неиспользуемых переменных в программе. Хотя вчера предупреждения были. Вносил в программу лишние переменные - Builder`у пофиг. Что с этой функцией может быть не так? Почему программа не отрабатывает даже команды, которые находятся выше вызова этой функции? Ставил в качестве индикаторов cout и Sleep(2000) в main`e и в теле функции - не отрабатывают. Консоль просто сразу закрывается. На фото результат успешного выполнения программы с закомментированной строкой scanner.GetResult(&lpBuffer); Во вложении описание классов библиотек от ф. Riftek/
0
|
||||||
|
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 37
|
|
| 08.06.2015, 11:06 [ТС] | |
|
Вопрос снимаю, использовал другую похожую функцию GetNormalizedResult, которая не зависает.
0
|
|
| 08.06.2015, 11:06 | |
|
Access violation at address 004A9FE5 in module 'Project1.exe'. Read of address 0003FFFC Access violation at address 32ABE860 in module cc32100mt.dll. read of address f8338338 Access violation at address 501F084A in module vcl120.bpl. Read of address 00000374 Ошибка Access violation at address XXXXXXX in module 'vcl240.bpl'. Read of address XXXXXX access violation at address 40009720 in module 'rtl60.bpl'. read of address Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ
Основная суть и тезисы по измерениям:
0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема.
Объект не может перемещаться в 0D.
1D (Первое измерение):. . .
|