Description de l'erreur d'exécution R6025 dans Visual C++

Traductions disponibles Traductions disponibles
Numéro d'article: 125749 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Sommaire

Résumé

Cet article décrit un problème qui peut se produire lors du développement d'un programme. Si vous continuez à rencontrer un problème semblable à celui décrit dans cet article, il peut s'agir d'un problème différent. Pour rechercher des informations relatives à un problème spécifique, incluez le nom du produit dans votre recherche afin de limiter les résultats. Pour dépanner des problèmes similaires, reportez-vous à la section « Problèmes similaires et solutions » plus loin dans cet article.

Symptômes

Le programme C++ échoue et signale l'erreur d'exécution suivante :
erreur d'exécution R6025
- appel d'une fonction virtuelle pure

Cause

Cette erreur se produit lorsque votre application appelle indirectement une fonction membre virtuelle pure dans un contexte où un appel à la fonction n'est pas valide. Dans la plupart des cas, le compilateur détecte cela et signale l'erreur lors de la génération de l'application. Mais selon la façon dont votre code est écrit, le problème est parfois détecté uniquement au moment de l'exécution.

L'erreur se produit lorsque vous appelez indirectement une fonction virtuelle pure dans le contexte d'un appel au constructeur ou au destructeur d'une classe de base abstraite. Cela est illustré dans l'exemple de code ci-dessous, avec une description supplémentaire.

Résolution

L'appel d'une fonction virtuelle pure étant une erreur de programmation, vous devez rechercher l'appel à la fonction virtuelle pure et réécrire le code afin qu'elle ne soit pas appelée.

L'une des manières de rechercher un appel à une fonction virtuelle pure est de remplacer la fonction virtuelle pure par une implémentation qui appelle la fonction API Windows DebugBreak. Lors de l'utilisation du débogueur, DebugBreak provoquera un point d'arrêt codé de manière irréversible. Lorsque le code cesse de s'exécuter à ce point d'arrêt, vous pouvez consulter la pile d'appels pour voir où la fonction a été appelée.

Une autre façon de rechercher un appel à une fonction virtuelle pure consiste à définir un point d'arrêt sur la fonction _purecall détectée dans PureVirt.c. L'arrêt sur cette fonction présente l'avantage de garder la pile intacte afin que vous puissiez tracer ce qui se produit.

Statut

Ce comportement est voulu par la conception même du produit.

Plus d'informations

Pour plus d'informations, reportez-vous à la page « C Run-Time Errors R6002 through R6025 » de la section « Build Errors » sur le site Web Microsoft Developer Network (MSDN) à l'adresse suivante (en anglais) :
http://msdn2.microsoft.com/en-us/library/aa277044(VS.60).aspx
Remarque L'erreur R6025 n'est pas documentée dans les manuels ni dans l'aide en ligne fournis avec Visual C++, versions 2.x ou supérieures. Toutefois, elle est discutée brièvement dans la Partie 3 du fichier Readme.wri fourni avec Visual C++ version 2.0.

Exemple de code

   /* 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()
   {
   }
				

Problèmes similaires et solutions

Si vous continuez à rencontrer un problème semblable à celui décrit dans cet article, il peut s'agir d'un problème différent. Pour plus d'informations sur les problèmes similaires et les solutions, cliquez sur les numéros ci-dessous pour afficher les articles correspondants dans la Base de connaissances Microsoft.
240437 Erreur d'exécution de Money : « R6025 - Appel de fonction virtuelle pure »
308260 Comment faire pour résoudre les erreurs de script dans Internet Explorer 6 et Internet Explorer 7 sur des ordinateurs Windows 2000, Windows XP, Windows Server 2003 ou Windows Vista
267572 WD2000 : Message d'erreur : « Erreur d'exécution '5' » au démarrage de Word
170409 SBFM97 : Erreurs d'exécution MS Visual C++ lors de l'importation de données Quickbooks
309299 Erreur d'exécution lorsque vous parcourez certaines pages Web

Propriétés

Numéro d'article: 125749 - Dernière mise à jour: jeudi 10 avril 2008 - Version: 8.0
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Visual C++ 2008 Express Edition
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Initiation
  • Microsoft Visual C++ .NET 2002 Initiation
  • Microsoft Visual C++ 6.0 Édition Professionnelle
  • Microsoft Visual C++ 6.0 Édition Entreprise
  • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • Microsoft Visual C++ 5.0 Édition Professionnelle
  • Microsoft Visual C++ 5.0 Édition Entreprise
  • Microsoft Visual C++ 4.2 Édition Professionnelle
  • Microsoft Visual C++ 4.1 Subscription
  • Microsoft Visual C++ 4.0 Édition Standard
  • Microsoft Visual C++ 2.1
  • Microsoft Visual C++ 2.0 Édition Professionnelle
  • Microsoft Visual C++ 1.52 Édition Professionnelle
  • Microsoft Visual C++ 1.51
  • Microsoft Visual C++ 1.5 Édition Professionnelle
  • Microsoft Visual C++ 1.0 Édition Professionnelle
Mots-clés : 
kbresolve kbtshoot kbcompiler kbcpponly kberrmsg kbprb KB125749
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

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