CORRECTIF : Vous rencontrer une violation d'accès lorsque vous sérialisez une Unicode CString dans Visual C++ 6.0

Traductions disponibles Traductions disponibles
Numéro d'article: 193100 - Voir les produits auxquels s'applique cet article
Cet article a été archivé. Il est proposé « en l'état » et ne sera plus mis à jour.
Agrandir tout | Réduire tout

Symptômes

Lorsque sérialisation dans une Unicode CString dans une MFC MBCS application ou vice versa, CString du fichier est en lecture, converti en une CString du type de build, et CString d'origine est supprimé. Lors de la suppression de CString d'origine, il se peut que vous constatiez une violation d'accès ou une erreur de page non valide. Le code de problème est de ligne 270 dans Arccore.cpp. Les symptômes décrits ici sont évidents dans les versions release.

Cause

CString dans la version Release utilise son propre gestionnaire de mémoire (classe CFixedAlloc) pour les chaînes de taille moins de 512 octets. Par conséquent, pour tous les CString (de moins de 512 octets) allocations effectuées par CFixedAlloc::Alloc() via CString::AllocBuffer() et désallocations correspondantes sont effectuées par CFixedAlloc::Free via CString::FreeData(). Dans l'opérateur de fonction de sérialisation de CString :

>> (CArchive& ar, CString& string)
				


au lieu d'appeler CString::FreeData() pour libérer les données, l'opérateur delete est appelée, et cela peut provoquer le problème mentionnée ci-dessus.

Résolution

Modifier ligne 270 dans Arccore.cpp dans la liste suivante :
delete[] (BYTE*)pOldData;
				
à la suivante :
CString::FreeData(pOldData);

				
reconstruire les bibliothèques MFC et lier statiquement à elle. La commande suivante crée la bibliothèque MFC débogage sans informations CodeView (NAFXCWD.lib) :
DÉBOGAGE DE NMAKE = 1 CODEVIEW = 0
Pour obtenir plus d'informations sur la création d'une variante de bibliothèque de liaisons statiques peut être obtenu à partir du fichier Lisezmoi.txt fourni avec Visual C++ ou dans xxxx\MFC\SRC\README.TXT (où xxxx est le nom de répertoire pour Visual C++ produit ; par défaut, C:\Program Files\Microsoft Visual Studio\VC98 pour Visual C++ version 6.0). La marque fichier existe dans le même répertoire et est nommé MAKEFILE.

Remarque Vous pouvez modifier la source, régénérez une version DLL de MFC bibliothèque. Toutefois, vous pouvez redistribuer une vente au détail (/Release) de votre bibliothèque modifié uniquement si vous le renommez à un élément other than MFCxx.dll. Vous ne pouvez pas redistribuer la version debug de la prédéfinis ou personnalisés intégrés débogage DLL. Veuillez vous reporter à "MFC Technical Note 33" pour plus d'informations.

Statut

Microsoft a confirmé l'existence de ce bogue dans les produits Microsoft répertoriés dans la section "S'applique à".Ce bogue a été corrigé dans Visual Studio 6.0 Service Pack 1.

Pour obtenir ce service pack, reportez-vous au site Web de MSDN (Microsoft Developer Network) à l'adresse suivante :
http://msdn2.microsoft.com/en-us/vstudio/Aa718362.aspx
Pour plus d'informations sur Visual Studio 6.0 Service Pack 1, cliquez sur les numéros ci-dessous pour afficher les articles correspondants dans la base de connaissances Microsoft :
193009Lisezmoi de Visual Studio 6.0 Service Pack 1
194022Visual Studio 6.0 service packs, quoi, où, pourquoi
194295Comment faire pour savoir qu'un service pack Visual Studio est installé

Plus d'informations

La pile des appels lorsque se produit la violation d'accès doit ressembler à ce qui suit :
   HeapFree(...)
   free(...)
   operator delete(...)
   operator>>(CArchive &, CString &)
				
(c) 1999 Microsoft Corporation, tous droits réservés. Contribution Jaganathan Thangavelu, Microsoft Corporation.

Propriétés

Numéro d'article: 193100 - Dernière mise à jour: samedi 22 février 2014 - Version: 6.2
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Foundation Class Library 4.2 sur le système suivant
    • Microsoft Visual C++ 6.0 Édition Entreprise
    • Microsoft Visual C++ 6.0 Édition Professionnelle
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
Mots-clés : 
kbnosurvey kbarchive kbmt kbqfe kbbug kbfix kbnoupdate kbvc600sp1fix kbvs600sp1fix KB193100 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 193100
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