Описание ошибки времени выполнения в Visual C++ R6025

Переводы статьи Переводы статьи
Код статьи: 125749 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Аннотация

Рассматривается проблема, которая может возникнуть при разработке программы. Если по-прежнему возникают проблемы, аналогичные этой статье, он может быть другая проблема. Для поиска проблем, связанных с конкретной проблемы, включите имя продукта для поиска, чтобы сузить результаты. Сведения об устранении подобных проблем см. ниже в разделе «Подобные проблемы и их решение» этой статьи.

Проблема

Программа C++ не выполняется и выдает следующее сообщение об ошибке во время выполнения.
Ошибка выполнения R6025
- вызов чистой виртуальной функции

Причина

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

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

Решение

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

Один из способов найти вызов чистой виртуальной функции — заменить реализацию, которая вызывает функцию Windows API DebugBreak на чисто виртуальную функцию. При использовании отладчика, DebugBreak вызовет точки останова жестко. Код не будет выполняться в этой точке останова, можно просмотреть стек вызова, чтобы увидеть, где эта функция была вызвана.

Другой способ вызова чистой виртуальной функции поиска является задание точки останова в функции _purecall , которая находится в PureVirt.c. Разбиение по этой функции имеет преимущество директорий стека, так что можно проследить, что происходит.

Статус

Данное поведение является нормальным.

Дополнительная информация

Для получения дополнительных сведений обратитесь к странице «Ошибки выполнения C: R6002 - R6025» раздела «Ошибки построения» на веб-узле Microsoft Developer Network (MSDN):
http://msdn2.Microsoft.com/en-us/library/aa277044 (VS.60).aspx
Примечание Ошибка R6025 не описанной в руководства или интерактивной справки, входящих в состав Visual C++ версии 2.x или ниже. Тем не менее он кратко обсуждается в часть 3 из файла Readme.wri, поставляемые с Visual C++ версии 2.0.

Пример кода

   /* Compile options needed: none
   */ 

   class A;

   void fcn( A* );

   class A
   {
   public:
       virtual void f() = 0;
       A() { fcn( this ); }
   };

   class B : A
   {
       void f() { }
   };

   void fcn( A* p )
   {
       p->f();
   }

   // The declaration below invokes class B's constructor, which
   // first calls class A's constructor, which calls fcn. Then
   // fcn calls A::f, which is a pure virtual function, and
   // this causes the run-time error. B has not been constructed
   // at this point, so the B::f cannot be called. You would not
   // want it to be called because it could depend on something
   // in B that has not been initialized yet.

   B b;

   void main()
   {
   }
				

Схожие неполадки и их решения

Если по-прежнему возникает проблема, похожая на описанную в этой статье, он может быть другая проблема. Дополнительные сведения о подобных проблемах и их решении щелкните приведенные ниже номера статей базы знаний Майкрософт:
240437 Ошибка выполнения Money: "R6025 -вызов чистой виртуальной функции"
308260 Устранение ошибок сценария в Internet Explorer 6 и Internet Explorer 7 на компьютерах под управлением Windows 2000, под управлением Windows XP, на базе Windows Server 2003 или ОС Windows Vista
267572 WD2000: Сообщение об ошибке: «Ошибка выполнения '5'» при запуске Word
170409 SBFM97: ошибки времени выполнения MS Visual C++ при импорте данных Quickbooks
309299 Ошибки во время выполнения при просмотре некоторых веб-страниц

Свойства

Код статьи: 125749 - Последний отзыв: 9 февраля 2014 г. - Revision: 11.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Visual C++ 2008 Express Edition
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 2.0 Professional Edition
  • Microsoft Visual C++ 1.5 Professional Edition
Ключевые слова: 
kbresolve kbtshoot kbcompiler kbcpponly kberrmsg kbprb kbmt KB125749 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Данная статья переведена с использованием программного обеспечения Майкрософт для машинного перевода и, возможно, отредактирована посредством технологии Community Translation Framework (CTF). Корпорация Майкрософт предлагает вам статьи, обработанные средствами машинного перевода, отредактированные членами сообщества Майкрософт и переведенные профессиональными переводчиками, чтобы вы могли ознакомиться со всеми статьями нашей базы знаний на нескольких языках. Статьи, переведенные с использованием средств машинного перевода и отредактированные сообществом, могут содержать смысловое, синтаксические и (или) грамматические ошибки. Корпорация Майкрософт не несет ответственности за любые неточности, ошибки или ущерб, вызванные неправильным переводом контента или его использованием нашими клиентами. Подробнее об CTF можно узнать по адресу http://support.microsoft.com/gp/machine-translation-corrections/ru.
Эта статья на английском языке: 125749

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com