|
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 37
|
||||||
Операция delete вызывает ошибку Access violation at address30.04.2014, 15:28. Показов 6471. Ответов 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. |
|
|
||
| 30.04.2014, 16:31 | ||
|
Когда возникает этот access violation, в консоли есть эти сообщения?
0
|
||
|
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 37
|
|
| 30.04.2014, 19:19 [ТС] | |
|
Нет, дисконнект происходит успешно с соответствующим сообщением
Disconnected(TCP) RF625Device #0 Проблема только в освобождении памяти через delete
0
|
|
|
Супер-модератор
|
||||||
| 30.04.2014, 19:33 | ||||||
|
npp, а попробуй не со сканнером, а просто запустить код, который будет подобным же образом заполнять/освобождать вектор. Скажем:
0
|
||||||
|
|
|
| 30.04.2014, 19:33 | |
|
У них походу в деструкторе ошибка (в модуле RFDevice.dll)
0
|
|
|
|
|
| 30.04.2014, 20:24 | |
|
Попробовал я создать dll-ку в XE6. В неё добавил класс, в котором экспортированы конструктор, деструктор, один метод и в котором есть переменная int *m_i. В конструкторе под неё выделяется память, а в деструкторе освобождается. Проверил эту dll-ку в BCB6 с использованием вектора, также как и в коде - никаких access violation не было.
0
|
|
|
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 37
|
|
| 30.04.2014, 21:46 [ТС] | |
|
UI, попробую Ваш код только в понедельник, когда попаду на работу.
А может быть, что delete пытается освободить память от уже несуществующего объекта? Может мне проверить (и как это сделать?) существует ли этот объект (или ссылка на объект - пока плохо разбираюсь в этих указателях)
0
|
|
|
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 37
|
|
| 05.05.2014, 12:59 [ТС] | |
|
UI, Ваша программа отрабатывает нормально.
Только добавил вначале #include <vcl>, иначе линкер ругался Unresolved external '__InitVCL'
0
|
|
|
91 / 91 / 22
Регистрация: 02.07.2013
Сообщений: 332
|
|
| 05.05.2014, 17:50 | |
|
npp, а если попробовать не вызывать Disconnect, а сразу освобождать память?
0
|
|
|
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 37
|
|||||||||||
| 06.05.2014, 10:12 [ТС] | |||||||||||
|
c0rvax, всё равно зависает на операции delete
Добавлено через 1 час 10 минут Вот что нашёл в интернетах про классы и деструкторы. Может быть это моим случаем? И попутный вопрос - насколько я понял из поста kzru_hunter, операция delete обязательно вызывает деструктор класса? Виртуальные деструкторы Довольно типичная ситуация, когда динамически создаётся объект производного класс, а указатель используется базового класса. При уничтожении объекта вызывается деструктор только базового класса. Например.
Чтобы не допускать таких ситуаций необходимо использовать виртуальный деструктор. Если при объявлении деструктора базового класса он объявляется как виртуальный, то все конструкторы производных классов также являются виртуальными. При разрушении объекта с помощью оператора delete через указатель на базовый класс будут корректно вызваны деструкторы производных классов.
0
|
|||||||||||
|
91 / 91 / 22
Регистрация: 02.07.2013
Сообщений: 332
|
||||||
| 06.05.2014, 13:11 | ||||||
|
npp, в этом случае используется явный указатель на класс, а не на базовый. Так что не этот случай. Что если создавать объекты не через new?
0
|
||||||
|
|
|||||||
| 06.05.2014, 14:50 | |||||||
|
npp Попробуйте минимальный код проверить типа такого:
0
|
|||||||
|
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 37
|
|||||||
| 14.05.2014, 12:01 [ТС] | |||||||
Попробовал Вашу минимальную программу с небольшой корректировкой (вывод сообщений на консоль) и вместо RF625Device *scanner = new RFDevice::RF625Device(ld[0]); написал RFDevice::RF625Device *scanner = new RFDevice::RF625Device(ld[0]); иначе ошибки (см. картинку). Результат - программа скомпилировалась, отработала нормально (нашла сканер, Connect, Disconnect успешный - смотрел в пошаговом режиме), на операции delete снова зависание Билдера - загрузка процессора на 100%
0
|
|||||||
|
|
||
| 14.05.2014, 14:33 | ||
|
0
|
||
|
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 37
|
||||||
| 16.05.2014, 09:28 [ТС] | ||||||
|
Установил CodeGear RAD Studio 2009 C++Builder 2009.
Созданное с нуля консольное приложение запустить не удалось - не компилится, выскакивает отладчик на вызов функции инициализации датчика, хотя .h и .lib подключаются успешно. Ну да ладно. Борландовский проект загрузился в этот CodeGear и нормально запустился, инициализация, коннект, дисконнект происходит успешно. Операция delete действительно ошибок и зависаний не вызывает, но память программа кушает! Примерно по 1 кБ за цикл. В Борланде этот код по-прежнему не работает (зависает на delete). Всё-таки кривой деструктор?
0
|
||||||
|
91 / 91 / 22
Регистрация: 02.07.2013
Сообщений: 332
|
|
| 16.05.2014, 09:39 | |
|
npp, наверное, не стоит делать Initialize в цикле...
0
|
|
|
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 37
|
|
| 16.05.2014, 10:20 [ТС] | |
|
Тоже так думал, но без инициализации датчик в сети не обнаруживается. RFDevice::Cleanup(); видимо сбрасывает настройки инициализации.
Вынес RFDevice::Initialize(); RFDevice::Cleanup(); за пределы цикла. Работает нормально. Память всё равно жрёт. Дело не в инициализации. Добавлено через 10 минут Хочу добавить, что 1 кБ за цикл это конечно не много, учитывая то, что датчик будет пропадать из сети ну пару раз в день ( при отключении питания, например). Но, компьютер, на котором крутится данная программа не выключается никогда, только засыпает. Более того, на этом компьютере работает оболочка промышленного робота, не хотелось бы получить её зависание из-за забитой памяти.
0
|
|
|
91 / 91 / 22
Регистрация: 02.07.2013
Сообщений: 332
|
|
| 16.05.2014, 16:56 | |
|
npp, а что если всё же попробовать статические переменные? ld же нормально создаётся.
0
|
|
|
easter
|
|
| 16.05.2014, 18:30 | |
|
Добрый день. Я разработчик той самой библиотеки.
В общем, нашел я установил Borland C++ 6.0 и скомпилировал в нем библиотеку. Правда, не разобрался как поменять имя целевого файла, так что либка получилась с названием Project1 Позапускал в релизе и дебаге, все работает как надо. |
|
|
0 / 0 / 0
Регистрация: 30.04.2014
Сообщений: 37
|
|
| 21.05.2014, 12:40 [ТС] | |
|
Здравствуйте! Прошу прощения за медленную реакцию, меня тут разрывают на другие проекты.
easter, попробую новую библиотеку и отпишусь обязательно, как только меня освободят ) c0rvax, я бы с удовольствием, чем проще, тем лучше, если не затруднит, как это сделать?
0
|
|
| 21.05.2014, 12:40 | |
|
Помогаю со студенческими работами здесь
20
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 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Сочетание глобально распределённой вычислительной мощности и инновационных. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|