Příznaky

Zvažte následující scénář.

  • Můžete vytvořit aplikaci, která načte bajtu z strukturu nebo třídy v Microsoft Visual Studio 2008 Service Pack 1 (SP1).

  • Můžete zapnout možnost optimalizace /Ox nebo /O2 optimalizace.

  • Při kompilaci aplikace pomocí konfigurace verze pro x64 platformě.

V tomto scénáři je nesprávný posun, který je generován pro přístup struktury členů nebo člena třídy.K tomuto problému dochází pouze při velikost struktury a posun nebo třídy velikosti a posun rovnat jedné z následujících dvojic:

  • (14,13)

  • (15,13)

  • (22,21)

  • (23,21)

  • (30,29)

  • (31,29)

Řešení

Informace o opravě hotfix

Podporovaná oprava hotfix je nyní k dispozici od společnosti Microsoft. Je však určena opravit pouze problém popsaný v tomto článku. Použijte ji pouze u systémů, ve kterých dochází k tomuto konkrétnímu problému. Tato oprava hotfix může být dále testována. Proto pokud jste závažně tento problém, doporučujeme počkat další aktualizaci service pack pro Visual Studio 2008, která obsahuje tuto opravu hotfix.Chcete-li tento problém vyřešit okamžitě, obraťte se na technickou podporu společnosti Microsoft získat opravu hotfix. Úplný seznam telefonních čísel služeb podpory zákazníků společnosti Microsoft a informace o cenách podpory naleznete na následujícím webu společnosti Microsoft:

http://support.microsoft.com/contactus/?ws=supportPoznámka: Ve zvláštních případech mohou být stornovány poplatky, které jsou třeba obvykle zaplatit za telefonní hovory, pokud pracovník služeb podpory společnosti Microsoft určí, že konkrétní aktualizace odstraní váš problém. Výdaje na technickou podporu použije dalších otázek a problémů, které nelze vyřešit konkrétní aktualizací.

Předpoklady

Musíte mít Visual Studio 2008 Service Pack 1 nainstalována tuto opravu hotfix.

Požadavek na restartování

Po instalaci této opravy hotfix nemusíte restartovat počítač.

Informace o nahrazení opravy hotfix

Tato oprava hotfix nenahrazuje žádné další opravy hotfix.

Informace o souborech

Anglická verze této opravy hotfix má atributy (nebo pozdější atributy souborů) uvedené v následující tabulce. Kalendářní data a časy jednotlivých souborů jsou uvedeny v koordinovaném světovém čase (UTC). Při zobrazení informací o souboru je převeden na místní čas. Rozdíl mezi místním časem a časem UTC naleznete na kartě Časové pásmo v položce Datum a čas v okně Ovládací panely.

Název souboru

Verze souboru

Velikost souboru

Datum

Čas

Platforma

C2.dll

15.0.30729. 4082

2,283,320

19. března 2009

05:13

x86

C2.dll

15.0.30729.4082

2,36 1,656

19. března 2009

05:13

x86

C2.dll

15.0.30729.4082

3,01 7,528

19. března 2009

05:13

x64

Link.exe

9.0.30729.4082

1,0 54,520

19. března 2009

05:13

x64

Link.exe

9.0.30729.4082

799, 032

19-Mar-2009

05:13

x86

Jak potíže obejít

Chcete-li tento problém vyřešit, přidejte jeden nebo více členů fiktivní "nepodepsané char" rozšířit velikost struktury nebo třídy, která má nejmenší násobkem osmi bajtů. Například rozšíření 14 bajtů na 16 bajtů.

Stav

Společnost Microsoft potvrdila, že se jedná o problém v produktech společnosti Microsoft, které jsou uvedeny v části "Platí pro".

Další informace

Pro další informace o terminologii používané v aktualizacích softwaru, klepněte na následující číslo článku k zobrazení článku v databázi Microsoft Knowledge Base:

824684 Popis standardní terminologie používané při popisu aktualizací softwaru společnosti Microsoft

Kroky pro reprodukci problému

  1. Vytvořte aplikaci, která pomocí následujícího kódu v aplikaci Visual Studio 2008 SP1 s názvem Test.cpp:

    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. Zkompilujte aplikaci pomocí následujícího příkazu:

    cl test.cpp /O2 /MD

Očekávaný výsledek je 4. Však skutečný výsledek je 0.

Potřebujete další pomoc?

Chcete další možnosti?

Prozkoumejte výhody předplatného, projděte si školicí kurzy, zjistěte, jak zabezpečit své zařízení a mnohem více.

Komunity vám pomohou klást otázky a odpovídat na ně, poskytovat zpětnou vazbu a vyslechnout odborníky s bohatými znalostmi.