Przejdź do głównej zawartości
Pomoc techniczna
Zaloguj się przy użyciu konta Microsoft
Zaloguj się lub utwórz konto.
Witaj,
Wybierz inne konto.
Masz wiele kont
Wybierz konto, za pomocą którego chcesz się zalogować.

Objawy

Rozważmy następujący scenariusz.

  • Utwórz aplikację, która ładuje bajt z struktury lub klasy w Microsoft Visual Studio 2008 z dodatkiem Service Pack 1 (SP1).

  • Możesz włączyć opcję optymalizacji/OX lub opcję optymalizacji/O2 .

  • Kompilowanie aplikacji przy użyciu konfiguracji wydania dla x64 platformy.

W tym scenariuszu przesunięcie, która jest generowana dostęp do elementu członkowskiego struktury lub członek klasy jest niepoprawna.

Ten problem występuje, gdy rozmiar struktury i przesunięcie lub w klasie i przesunięcie równa tylko jedną z następujących par:

  • (14,13)

  • (15,13)

  • 22,21 (–)

  • (23,21)

  • (30,29)

  • (31,29)

Rozwiązanie

Informacje o poprawce

Obsługiwana poprawka jest obecnie udostępniana przez firmę Microsoft. Jednak jest ona przeznaczona do usunięcia tylko problemu opisanego w tym artykule. Zastosuj ją tylko w systemach, w których występuje ten problem. Ta poprawka może być wciąż w fazie testowania. Jeśli dany system nie jest poważnie narażony na ten problem, firma Microsoft zaleca, aby poczekać na następny program Visual Studio 2008 z dodatkiem Service pack zawierający tę poprawkę.

Aby natychmiast rozwiązać ten problem, skontaktuj się z biurem obsługi klienta Microsoft w celu uzyskania poprawki. Aby uzyskać pełną listę numerów telefonów pomocy technicznej firmy Microsoft oraz informacje o pomocy technicznej odwiedź następującą witrynę firmy Microsoft w sieci Web:

http://support.microsoft.com/contactus/?ws=supportUwaga W wyjątkowych przypadkach opłaty za połączenie z pomocą techniczną mogą zostać anulowane, jeśli specjalista firmy Microsoft zdecyduje że określona aktualizacja, może rozwiązać Twój problem. Koszty obsługi zwykłych zastosuje się do dodatkowych pytań i problemów, których nie można rozwiązać przy użyciu określonej aktualizacji.

Wymagania wstępne

Musi mieć Visual Studio 2008 z dodatkiem Service Pack 1 zainstalowany, aby można było zastosować tę poprawkę.

Wymagania dotyczące ponownego uruchomienia

Nie musisz ponownie uruchomiać komputera po zastosowaniu tej poprawki.

Informacje dotyczące zastępowania poprawek

Ta poprawka nie zastępuje żadnych innych poprawek.

Informacje o plikach

Wersja anglojęzyczna tej poprawki ma atrybuty plików (lub nowsze) wymienione w poniższej tabeli. Daty i godziny odpowiadające tym plikom zostały podane w formacie uniwersalnego czasu koordynowanego (UTC, Coordinated Universal Time). Po wyświetleniu informacji o pliku są konwertowane na czas lokalny. Aby zobaczyć różnicę między czasem UTC i czasem lokalnym, należy użyć z karty Strefa czasowa w aplecie Data i godzina w Panelu sterowania.

Nazwa pliku

Wersja pliku

Rozmiar pliku

Data

Godzina

Platforma

C2.dll

15.0.30729. 4082

2,283,320

19-Mar-2009

05:13

x86

C2.dll

15.0.30729.4082

1 2,36 656

19-Mar-2009

05:13

x86

C2.dll

15.0.30729.4082

3,01 7,528

19-Mar-2009

05:13

x64

Link.exe

9.0.30729.4082

1,0 54,520

19-Mar-2009

05:13

x64

Link.exe

9.0.30729.4082

799, 032

19-Mar-2009

05:13

x86

Obejście problemu

Aby obejść ten problem, należy dodać jeden lub więcej członków fikcyjny "unsigned char" rozszerzyć rozmiar struktury lub klasy do najmniejszej wielokrotnością liczby 8 bajtów. Na przykład rozszerzenie bajtów 14 do 16 bajtów.

Stan

Firma Microsoft potwierdziła, że jest to problem występujący w produktach firmy Microsoft wymienionych w sekcji „Dotyczy”.

Więcej informacji

Aby uzyskać więcej informacji dotyczących terminologii aktualizacji oprogramowania, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:

824684 Opis standardowej terminologii używanej do opisywania aktualizacji oprogramowania firmy Microsoft

Kroki prowadzące do odtworzenia problemu

  1. Utwórz aplikację o nazwie Test.cpp za pomocą następującego kodu w programie Visual Studio 2008 z dodatkiem 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. Kompilowanie aplikacji za pomocą następującego polecenia:

    Cl test.cpp/O2/MD

Oczekiwany wynik to 4. Jednakże rzeczywisty wynik jest równy 0.

Potrzebujesz dalszej pomocy?

Chcesz uzyskać więcej opcji?

Poznaj korzyści z subskrypcji, przeglądaj kursy szkoleniowe, dowiedz się, jak zabezpieczyć urządzenie i nie tylko.

Społeczności pomagają zadawać i odpowiadać na pytania, przekazywać opinie i słuchać ekspertów z bogatą wiedzą.

Czy te informacje były pomocne?

Jaka jest jakość języka?
Co wpłynęło na Twoje wrażenia?
Jeśli naciśniesz pozycję „Wyślij”, Twoja opinia zostanie użyta do ulepszania produktów i usług firmy Microsoft. Twój administrator IT będzie mógł gromadzić te dane. Oświadczenie o ochronie prywatności.

Dziękujemy za opinię!

×