Symptomen

Neem het volgende scenario.

  • U maakt een toepassing die wordt geladen een byte van een structuur of van een klasse in Microsoft Visual Studio 2008 Service Pack 1 (SP1).

  • Schakelt u de optie/OX optimalisatie of /O2 optimalisatie.

  • U de toepassing compileren met behulp van een release-configuratie voor het x64 platform.

In dit scenario wordt klopt de verschuiving die wordt gegenereerd voor toegang tot het lid van de structuur of het klassenlid niet.Dit probleem doet zich alleen wanneer de structuurgrootte en de offset of de grootte van de klasse en de verschuiving gelijk is aan een van de volgende paren:

  • (14,13)

  • (15,13)

  • (22,21)

  • (23,21)

  • (30,29)

  • (31,29)

Oplossing

Informatie over de hotfix

Een ondersteunde hotfix is nu beschikbaar bij Microsoft. Het is echter bedoeld om alleen het probleem dat wordt beschreven in dit artikel. Pas deze alleen toe op systemen waarop dit specifieke probleem zich voordoet. Deze hotfix moet wellicht extra worden getest. Als u geen ernstige problemen ondervindt, is het daarom raadzaam te wachten op de volgende versie van Visual Studio 2008 servicepack waarin deze hotfix is opgenomen.U lost dit probleem meteen contact op met Microsoft Customer Support Services om de hotfix te verkrijgen. Voor een volledige lijst met telefoonnummers van Microsoft Customer Support Services en informatie over kosten van ondersteuning vindt u op de volgende Microsoft-website:

http://support.microsoft.com/contactus/?ws=supportOpmerking In speciale gevallen kunnen kosten die normaal aan ondersteuningsoproepen verbonden zijn, worden geannuleerd als een medewerker van Microsoft productondersteuning van mening is dat een specifieke update de oplossing van uw probleem is. De normale ondersteuningskosten blijven gelden voor extra ondersteuningsvragen die niet in aanmerking voor de specifieke update in kwestie komen.

Vereisten

U kunt Visual Studio 2008 Service Pack 1 geïnstalleerd om deze hotfix moet hebben.

Opnieuw opstarten

U hoeft de computer niet opnieuw op te starten nadat u deze hotfix hebt toegepast.

Informatie over het vervangen van hotfixes

Deze hotfix vervangt geen andere hotfixes.

Bestandsinformatie

De Engelse versie van deze hotfix heeft de bestandskenmerken (of recentere bestandskenmerken) die in de volgende tabel worden weergegeven. De datums en tijden voor deze bestanden worden weergegeven in Coordinated Universal Time (UTC). Wanneer u de bestandsinformatie weergeeft, wordt deze naar lokale tijd geconverteerd. Om het verschil tussen UTC en lokale tijd op te zoeken, gebruikt u het tabblad tijdzone in het onderdeel datum en tijd in het Configuratiescherm.

Bestandsnaam

Bestandsversie

Bestandsgrootte

Datum

Tijd

Platform

C2.dll

15.0.30729. 4082

2,283,320

19 mrt 2009

05:13

x86

C2.dll

15.0.30729.4082

2,36 1,656

19 mrt 2009

05:13

x86

C2.dll

15.0.30729.4082

3,01 7,528

19 mrt 2009

05:13

x64

Link.exe

9.0.30729.4082

1,0 54,520

19 mrt 2009

05:13

x64

Link.exe

9.0.30729.4082

799, 032

19-Mar-2009

05:13

x86

Tijdelijke oplossing

Om dit probleem te omzeilen, Voeg een of meer leden dummy "unsigned char" om uit te breiden van de grootte van de structuur of van de klasse op het kleinste veelvoud van acht bytes. Uitbreiden, bijvoorbeeld 14 bytes tot 16 bytes.

Status

Microsoft heeft bevestigd dat dit probleem kan optreden in de Microsoft-producten die worden vermeld in de sectie 'Van toepassing op'.

Meer informatie

Voor meer informatie over terminologie voor software-updates klikt u op het volgende artikelnummer om het artikel in de Microsoft Knowledge Base weer te geven:

824684 beschrijving van de standaardterminologie die wordt gebruikt om software-updates voor Microsoft te beschrijven

Stappen om het probleem te reproduceren

  1. Een toepassing maken die met de naam Test.cpp met de volgende code in Visual Studio 2008 SP1:

    typedef struct DskDecimal{      unsigned char                       precision;              unsigned char                       scaleFactor;            unsigned short                      value[ 5];      unsigned char                       maxPrecision;      unsigned char                       maxScaleFactor;   } DskDecimal;int main(){      DskDecimal decimal;      decimal.maxScaleFactor = 4;      DskDecimal self = decimal;      return self.maxScaleFactor;}
  2. Compileer de toepassing met de volgende opdracht:

    cl test.cpp/MD /O2

Het verwachte resultaat is 4. Het feitelijke resultaat is 0.

Meer hulp nodig?

Meer opties?

Verken abonnementsvoordelen, blader door trainingscursussen, leer hoe u uw apparaat kunt beveiligen en meer.

Community's helpen u vragen te stellen en te beantwoorden, feedback te geven en te leren van experts met uitgebreide kennis.