Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

pure virtual function call R6025

pure virtual function call R6025
Я
   PaulMuller
 
11.05.19 - 10:34
Здраствуйте ув. знатоки. Сидел себе, кодил аки боженька, никого не трогал, и тут нарвался на такое:

https://drive.google.com/file/d/1Q0qxmyLFFXzE8vGTodDgZz24q8L1agfp/view?usp=sharing

Ошибка стабильно вылезает во время обращения к дом документу. Быстро прошелся по гуглу, увидел только советы на MSDN для С++ прогеров. Есть кто сталкивался с подобным?
 
 
   dmpl
 
1 - 11.05.19 - 11:07
(0) Ну, бывает. Что-то не учли программисты. Как говорил Джобс - "не делай так" :) У меня было подобное, когда в документ DOM пытался атрибут xmlns вставить, притом что он уже был. Предварительное удаление атрибута не помогало. Можно попробовать платформу обновить (например, на 8.3.12 - там используются другие библиотеки C++).
   PaulMuller
 
2 - 11.05.19 - 11:15
(1) Обновление к сожалению не выход. У нас старая, сильно переписанная конфа. Прошлые попытки оновления платформы вызвали кучу ошибок в работе.

Нагуглил еще такое

"Вопрос к 1С, в чистом виде. Насколько я помню, такое сообщение начинает выскакивать если процесс rphost съедает более гига памяти. В качестве варианта - разрешить на сервере предприятия несколько процессов."

Планирую просмотреть что там по памяти, возможно как-то пооптимизировать код, явно очищая переменные в которых глобально хранил ПравилаОбмена и тд.

Судя по игровым форумам, максимальная оптимизация системы помогает, но это не точно.

"Возможное решение проблемы с ошибкой R6025 Pure virtual function call.
KolaKid
Здравствуйте, посетители данного портала.

Буквально неделю назад столкнулся с проблемой: после установки Dawnguard регулярно начала вылетать ошибка R6025 pure virtual function call. И вот, неделю спустя, после штрудирования интернета (в том числе и заграничного), я решил свою проблему. Skyrim перестал вылетать. Пытался решить проблему переустановками всяких библиотек VC++, не помогало. Новые драйвера, переустановка игры тоже не помогали. И вот вчера я сделал следующее, что советую сделать всем, кто столкнулся с данной проблемой (делал все на Windows 7):

1. Удалить ВСЕ версии Visual C++, начиная 2005, заканчивая 2010. Поставить все заново поочереди - 2005, 2008, 2010 версии (желательно также ставить SP1 к некоторым из этих версий).

2. Если вы пользуетесь AVG Antivirus, удалите его. Поставьте, наконец, Касперского. Я поставил MSE (Microsoft Security Essentials).

3. Почистите жесткий диск от ненужного мусора. Чистка желательна для пункта 5.

4. Самый важный пункт. Сходите в Панель управления->Центр обновления Windows. Проверьте наличие апдейтов. Качайте все апдейты в графе "необходимые". Необязательные апдейты качать не обязательно. Если у вас пиратский Win7, то не качайте обновление KB971033 (этот апдейт предназначен для улучшенной проверки лицензионности Windows и выявления дыр в системе проверки). Если у вас в апдейтах доступны апдейты типа "обновление для Visual C++", то их устанавливайте обязательно. Даже если вы ставили все версии Visual C++ через установщик.

5. Сделайте дефрагментацию жесткого диска после установки всех апдейтов. Советую использовать программу Defraggler. Также советую не пренебрегать пунктом 3. Зачем вам дефрагментировать то, что вам не нужно? Defraggler не самая быстрая программа для дефрагментации жесткого диска (зато качественная), поэтому делайте выводы, товарищи.

Итого: раньше вылетало с частотой раз в пол часа-час, бывало и чаще. После вышеописанных танцев с бубном игра не вылетает уже 6 часов.

P.S. Если кому поможет, то прошу администрацию вбить данную статейку в FAQ, ибо других более менее адекватных решений данной проблемы я не нашел ни в steam-community, ни в интернете вообще. Если остались вопросы, задавайте их тут."
   dmpl
 
3 - 11.05.19 - 11:36
(2) Рекомендую начать с изучения виртуальных функций:
https://ru.wikipedia.org/wiki/Виртуальный_метод

В частности, про pure virtual function:

"Базовый класс может и не предоставлять реализации виртуального метода, а только декларировать его существование. Такие методы без реализации называются «чистыми виртуальными» (перевод англ.  pure virtual) или абстрактными."

Т.о., указанная ошибка происходит когда ни один из классов-наследников не предоставил реализации какого-то  виртуального метода базового класса, и по цепочке наследования вызов дошел до базового класса, который не имеет реализации нужного метода, а потому он не может быть выполнен.

Ищите, в какой именно строке происходит вылет, и меняйте программу так, чтобы вылета не происходило. Также полезным может быть просмотр событий в журнале приложений - там будет более подробная информация, в каком модуле произошло исключение.

P.S. У меня вылетало даже в файловом варианте.
P.P.S. В правильном режиме совместимости ошибок на новой платформе быть не должно, если есть - их надо устранять, а не прятать. В конце-концов, можно же копию поднять на новой платформе и проверить, устранится ошибка или нет. Если нет - то можно смело отметать этот вариант.
   PaulMuller
 
4 - 11.05.19 - 15:19
Память никак не изменяется при возникновении ошибки, и на мегабайтик. Есть предположение что для объекта ЭлементDOM нету конструктора в платформе. Тоесть если я из процедуры выбрасываю ретурном ЭлементDOM то 1с падает.
   PaulMuller
 
5 - 11.05.19 - 15:30
Ошибка ушла когда я переписал код так, что бы не перебрасывать ЭлементDOM между функциями. Вычленил его и обработал в одной функции и ошибка не повторилась. Может кому-то поможет. Если кто-то может на других версиях платформы прочитать домДок, и вернуть из функции его елемент и прочитать его - отпишитесь пожалуйста).
   dmpl
 
6 - 11.05.19 - 17:01
(4) Обмена клиент-сервер при этом, случаем, не происходит?
   PaulMuller
 
7 - 14.05.19 - 14:51
(6)Нет.

Сегодня снова ошибка повторилась:


DomObject = DomObject.ПервыйДочерний;

Грубо говоря попытался присвоить ЕлементДом в переменную. Походу так делать нельзя, как минимум на моей версии 1с платформы.
   dmpl
 
8 - 14.05.19 - 17:23
(7) Скорее тут сам файл что-то такое неправильное содержит, что библиотека вылетает. Кстати, в какой DLL ошибка? По идее, для внешней библиотеки должно быть без разницы, присваиваешь ты значение переменной или обходишь коллекцию в цикле Для Каждого - все равно создается переменная и ей присваивается значение. А у меня достаточно много кода, который обходит коллекцию узлов - и оно на корректных данных не вылетало даже на 8.2.19.130.

Нашел даже код, когда ЭлементDOM мало того что присваивался переменной, но эта переменная была в массиве, который затем возвращался из функции.
   Сияющий в темноте
 
9 - 14.05.19 - 17:31
Скорей всего,у вас кривый дом элементы,и так как их тип не задан,то и функций у них нет,как раз только базовый класс.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует