Access violation reading location
Есть dll, доступа к исходному коду у меня нет, идет в составе sdk к прибору.
На одном компьютере программа, использующая эту dll, нормально отрабатывает, на другом - вылетает с unhandled exception в этой dll: Access violation reading location.
Отличий в установленных c++ runtime libraries нет, брандмауэр отключен и там и там, Dependency Walker показывает, что необходимые библиотеки присутствуют
В какую сторону думать, чтобы на втором компьютере перестало вылетать?
P.S. для тех, кто в комментариях не поверил, что есть только dll - единственная работа с этой библиотекой представляет собой:
- подкинуть ее в папку с программой
- в файле конфигурации формата .ini прописать название этой либы
Ответы (1 шт):
Ошибки работы с памятью, могут приводить к падению в разных местах, в т.ч. в сторонних dll. Используйте _CrtCheckMemory, AddressSanitizer ... Попробуйте написать минимальное приложение вызывающее эту DLL, и имеющее разное поведение на машинах.
проверить документацию на эту dll. Проверить все требования к вызову функций этой dll. Записать в логи все данные поступающие на вход этой DLL на обоих машинах, потом сравнить. Возможно, ошибка не на стороне dll.
проверить к чему программа обращается (файлы, реестр). Возможно, неверно написана обработка случая отсутствия какого-то файла с данными.
возможно, неверно написана обработка случая отсутствия какой-то динамически подключаемой библиотеки (в т.ч. COM). Запустить процесс под отладчиком, на машине где работает, составить список реально загружаемых библиотек.
возможно, DLL содержит неопределенное поведение. Туи без исходников - никак.