Symptômes
Prenons l’exemple du scénario suivant :
-
Vous activez l’option d’optimisation globale (/Og) en activant une des options suivantes :
-
/O1
-
/O2
-
/Ox
-
-
Vous créez un fichier de code source Microsoft Visual C++ à l’aide de Microsoft Visual Studio 2008 Service Pack 1 (SP1).
-
Le fichier source appelle la fonction setjmp , la fonction longjmp ou les deux fonctions.
Dans ce scénario, le compilateur peut utiliser le même offset de pile pour stocker les variables locales différentes. Par conséquent, un comportement inattendu peut se produire lorsque vous exécutez l’application générée.
Cause
Ce problème se produit parce que l’optimiseur ne tient pas compte de la fonction setjmp ou longjmp . Ainsi, l’optimiseur calcule pas correctement la durée de vie des variables locales. Lorsqu’une variable est modifiée, une autre variable peut être modifiée de manière inattendue.
Résolution
Informations sur le correctif logiciel
Un correctif pris en charge est disponible auprès de Microsoft. Toutefois, ce correctif vise à corriger uniquement le problème décrit dans cet article. Appliquez ce correctif uniquement aux systèmes qui rencontrent le problème décrit dans cet article. Ce correctif va peut-être subir des tests supplémentaires. Par conséquent, si vous n'êtes pas sérieusement concerné par ce problème, nous vous recommandons d'attendre la prochaine mise à jour logicielle qui contiendra ce correctif. Pour résoudre ce problème immédiatement, contactez les Services de Support technique Microsoft pour obtenir le correctif. Pour une liste complète des numéros de téléphone du service clientèle de Microsoft ou pour créer une demande de service distincte, visitez le site Web Microsoft suivant :
http://support.microsoft.com/contactus/?ws=supportRemarque Dans certains cas, aucuns frais de support technique par téléphone ne vous sera facturé si un professionnel du support Microsoft détermine qu’une mise à jour spécifique peut résoudre votre problème. Les coûts habituels du support technique s’appliqueront aux autres questions et problèmes qui ne relèvent pas de la mise à jour spécifique en question. Pour télécharger ce correctif à partir de la galerie de Code Microsoft Developer Network (MSDN), visitez le site Web Microsoft suivant :
http://code.msdn.microsoft.com/KB2498381Remarque MSDN Code Gallery affiche les langues pour lesquelles ce correctif est disponible. Si vous ne voyez pas votre langue, c'est certainement dû au fait que la page de ressource Code Gallery n'existe pas dans cette langue. Ou bien, vous pouvez télécharger ce correctif depuis le site Microsoft Connect :
https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=34826
Conditions préalables
Pour appliquer ce correctif, vous devez disposer de Microsoft Visual Studio 2008 Service Pack 1 est installé.
Informations sur le redémarrage
Vous n’êtes pas obligé de redémarrer l’ordinateur après l’installation de ce correctif si vous avez arrêté toutes les instances de Visual Studio.
Informations sur le remplacement de correctif logiciel
Ce correctif ne remplace pas un correctif précédemment publié.
Informations sur les fichiers
La version globale de ce correctif logiciel installe des fichiers dont les attributs sont répertoriés dans les tableaux ci-dessous. Les date et heure de création de ces fichiers sont exprimées en temps universel coordonné (UTC). Les date et heure de ces fichiers s’affichent sur votre ordinateur local conformément à l’heure locale et en tenant compte de l’heure d’été. En outre, ces date et heure peuvent changer lorsque vous effectuez certaines opérations sur les fichiers.
Nom du fichier |
Version du fichier |
Taille du fichier |
Date |
Heure |
Plateforme |
---|---|---|---|---|---|
C2.dll |
15.0.30729.6147 |
2,283,840 |
25-fév-2011 |
01:25 |
x86 |
C2.dll |
15.0.30729.6147 |
2,362,688 |
25-fév-2011 |
01:25 |
x86 |
C2.dll |
15.0.30729.6147 |
2,493,248 |
25-fév-2011 |
01:25 |
x86 |
C2.dll |
15.0.30729.6147 |
3,018,048 |
25-fév-2011 |
01:25 |
x64 |
C2.dll |
15.0.30729.6147 |
7,263,040 |
25-Feb-2011 |
01:25 |
IA-64 |
Link.exe |
9.0.30729.6147 |
1,055,560 |
25-fév-2011 |
01:25 |
x64 |
Link.exe |
9.0.30729.6147 |
2,135,368 |
25-Feb-2011 |
01:25 |
IA-64 |
Link.exe |
9.0.30729.6147 |
800,584 |
25-Feb-2011 |
01:25 |
x86 |
Solution de contournement
Pour contourner ce problème, initialisez les variables locales au début de la fonction afin que le compilateur puisse être conscient de la durée de vie des variables.
Statut
Microsoft a confirmé l'existence de ce problème dans les produits Microsoft figurant dans la liste des produits concernés par cet article.
Informations supplémentaires
Pour plus d'informations sur la terminologie de mise à jour logicielle, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
824684 Terminologie standard utilisée pour décrire les mises à jour logicielles Microsoft