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
-
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; } -
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.