Runtime error r6025 pure virtual function call

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

Причины появления ошибки R6025

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

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

Моя программа завершает своё выполнение с ошибкой:

R6025 pure virtual function call.

Как вообще такое возможно, чтобы была вызвана чисто виртуальная функция? Экземпляр абстрактного класса не может быть создан. Если функция виртуальная, то используется позднее связывание, т.е. вызываться должна функция по типу объекта, а не по типу ссылки. Т.е. чисто виртуальная функция не может быть вызвана. Что мне делать?

3 ответа 3

В ответе @AnT было объяснено, как может получиться такая ошибка. (Это вызов виртуальной функции, прямо или косвенно, в конструкторе или деструкторе.)

Теперь вопрос в том, что делать.

Для начала, попробуйте воспроизвести проблему под отладчиком. Microsoft советует заменить абстрактный метод на вызов DebugBreak , или запустить из-под отладчика и установить точки останова на _purecall в PureVirt.c . Но у меня проблема отловилась в Visual Studio 2015 и без этих заклинаний.

Вы увидите в стеке, какой именно абстрактный метод вы вызываете, и поискав по стеку конструктор или деструктор объекта данного класса, найдёте ошибочный вызов. Помните, что это вполне может быть косвенный вызов, через другие функции.

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

Читайте также:  Roland tri capture driver

Ещё одной причиной данной ошибки может служить вызов функции по указателю на уже умерший объект. Если деструктор объекта отработал, то при условии, что память, занимаемая объектом, никем не затёрта, при попытке вызова метода по мёртвому указателю будет также выполнен чисто виртуальный метод (эта ситуация аналогична вызову метода в деструкторе), с понятными последствиями. Так что если в вашем стеке нету конструктора/деструктора, всё куда хуже: у вас умер указатель.

Здравствуйте, посетители данного портала.

Буквально неделю назад столкнулся с проблемой: после установки 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++ через установщик.

Читайте также:  Canon i sensys 3228 драйвер

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

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

Rate this post

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *