KORRIGERA: Oväntat beteende när du kör en genererade Visual Studio 2008 Service Pack 1-program som anropar funktionen setjmp eller funktionen longjmp i en källfil


Symptom


Tänk dig följande situation:
  • Du aktiverar alternativet global optimering (/Og) genom att aktivera något av följande alternativ:
    • /O1 
    • /O2 
    • /Ox 
  • Du skapar en Microsoft Visual C++ källfilen med hjälp av Microsoft Visual Studio 2008 Service Pack 1 (SP1).
  • Källfilen anropar funktionen setjmp , longjmp funktion eller båda funktionerna.
I det här scenariot använder kompilatorn samma stack-förskjutning för att lagra olika lokala variabler. Därför kan oväntat beteende uppstå när du kör programmet som genererade.

Orsak


Det här problemet beror på optimering inte tar hänsyn till setjmp -funktionen eller funktionen longjmp . Detta medför att optimering att felaktigt beräkna livslängden för lokala variabler. När en variabel har ändrats, ändras en annan variabel oväntat.

Lösning


Information om snabbkorrigeringen

En snabbkorrigering är tillgänglig från Microsoft. Den här snabbkorrigeringen är emellertid avsedd att åtgärda det problem som beskrivs i denna artikel. Använd den här snabbkorrigeringen endast på datorer som har problemet som beskrivs i denna artikel. Snabbkorrigeringen kan komma att testas igen. Om du inte störs alltför mycket av detta problem rekommenderar vi att du väntar på nästa programuppdatering som innehåller den här snabbkorrigeringen. Om du vill lösa problemet omedelbart kontaktar du Microsoft support för att få snabbkorrigeringen. En fullständig lista över telefonnummer för Microsofts kundtjänst och Support eller skapa en serviceförfrågan finns på följande Microsoft-webbplats: Obs! I vissa fall kan supporten vara avgiftsfri, t.ex. om en supporttekniker kommer fram till att problemet kan lösas med en viss uppdatering. De vanliga supportkostnaderna gäller för övriga supportfrågor och problem som inte berör den särskilda uppdateringen. Om du vill hämta snabbkorrigeringen från galleriet kod Microsoft Developer Network (MSDN) finns på följande Microsoft-webbplats:Obs! Galleri för MSDN-kod visar de språk som snabbkorrigeringen är tillgänglig. Om du inte ser ditt språk i listan beror det på att koden Gallery resurssidan inte är tillgänglig för språket. Eller så kan du hämta snabbkorrigeringen från följande Microsoft Connect-webbplatsen:

Förutsättningar

Om du vill installera den här snabbkorrigeringen måste du ha Microsoft Visual Studio 2008 Service Pack 1 installerat.

Information om omstart

Du behöver inte starta om datorn när du har installerat den här snabbkorrigeringen om du har stoppat alla instanser av Visual Studio.

Ersättningsinformation för Hotfix

Den här snabbkorrigeringen ersätter inte någon tidigare utgiven snabbkorrigering.

Filinformation

Den globala versionen av den här snabbkorrigeringen installerar filer med de filattribut som visas i följande tabeller. Datum och tider för dessa filer anges i UTC-tid (UTC). Datum och tider för dessa filer på den lokala datorn visas i lokal tid tillsammans med din aktuella sommartid (DST). Datum och tider kan dessutom ändras när du utför vissa åtgärder på filerna.
FilnamnFilversionStorlekDatumTidPlattform
C2.dll15.0.30729.61472,283,84025-Feb-201101:25x86
C2.dll15.0.30729.61472,362,68825-Feb-201101:25x86
C2.dll15.0.30729.61472,493,24825-Feb-201101:25x86
C2.dll15.0.30729.61473,018,04825-Feb-201101:25x64
C2.dll15.0.30729.61477,263,04025-Feb-201101:25IA-64
Link.exe9.0.30729.61471,055,56025-Feb-201101:25x64
Link.exe9.0.30729.61472,135,36825-Feb-201101:25IA-64
Link.exe9.0.30729.6147800,58425-Feb-201101:25x86

Lösning


Undvik det här problemet genom att initiera lokala variabler tidigt i funktionen så att kompilatorn kan vara medveten om de variabler livstid.

Status


Microsoft har bekräftat att detta är ett problem i Microsoft-produkterna som nämns i avsnittet ”gäller”.

Mer information


För mer information om terminologin för programuppdateringar klickar du på följande artikelnummer och läser artikeln i Microsoft Knowledge Base:
824684 Beskrivning av standardterminologin som används för att beskriva Microsoft-programuppdateringar