|
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 37
|
||||||
Операция delete вызывает ошибку Access violation at address30.04.2014, 15:28. Показов 6668. Ответов 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 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
|
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано
Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
|
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано
Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
|
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0)
Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона
Уважаемые коллеги!
В продолжение. . .
|
|
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии
Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
|
Текстовый слайдер с нумерацией страниц и кроссбраузерность.
russiannick 18.07.2026
Один мой друг написал текстовый слайдер с нумерацией страниц. Сегодня я расскажу как он умудрился подружить его с кроссбраузерностью.
Очевидно сложно угодить с шириной каждому браузеру. Один крадет. . .
|
Грибы - это мемы, дерево - это человек. Применение микоризной модели к теории меметики Докинза.
anaschu 18.07.2026
Меметический изоморфизм теории «всего»: Грибная сукцессия как модель эволюции идей Докинза
Базовый код системы ОДУ микоризной сукцессии описывает не просто биологию, а универсальную. . .
|
Грибы - это корпорации, деревья - это государства. Механизм массонского захвата власти
anaschu 18.07.2026
Макроэкономический изоморфизм теории «всего»: Грибная сукцессия как модель транснационального капитализма
Базовый код системы ОДУ микоризной сукцессии описывает не просто биологию, а. . .
|