Преминаване към основното съдържание
Поддръжка
Влизане с Microsoft
Влезте или създайте акаунт.
Здравейте,
Изберете друг акаунт.
Имате няколко акаунта
Изберете акаунта, с който искате да влезете.

Симптоми

Да разгледаме следния сценарий.

  • Можете да създадете приложение, което зарежда байт структура или клас в Microsoft Visual Studio 2008 Service Pack 1 (SP1).

  • Включване на /Ox оптимизация /O2 оптимизация опцията или.

  • Съставяне приложението чрез изданието конфигурация за x64 платформа.

В този случай offset, която се получава достъп до структура на члена или на клас е неправилен.

Този проблем възниква само когато размера на структурата и изместване или размера на класа и изместване равно един от следните двойки:

  • (14,13)

  • (15,13)

  • (22,21)

  • (23,21)

  • (30,29)

  • (31,29)

Решение

Информация за актуалната корекция

Вече се предлага от Microsoft предоставя поддържана актуална корекция. Но тя е предназначена да коригира само проблема, описан в тази статия. Прилагайте корекцията само към системи, изпитващи този конкретен проблем. Възможно е провеждането на допълнителни тестове на тази актуална корекция. Следователно ако не сте силно засегнати от този проблем, препоръчваме да изчакате следващия сервизен пакет за Visual Studio 2008, който ще съдържа тази корекция.

За незабавно решаване на проблема, се обърнете към услугите за поддръжка на клиенти на Microsoft да получите актуалната корекция. За пълен списък на телефонните номера на отдела за поддръжка на Microsoft и информация за цените на поддръжката посетете следния уеб сайт на Microsoft:

http://support.microsoft.com/contactus/?ws=supportЗабележка: При специални случаи таксите, които са за свързани с поддръжката обаждания могат да бъдат отменени, ако специалист по поддръжката на Microsoft прецени, че конкретна актуализация може да разреши проблема. Обичайните такси за поддръжката ще важат за допълнителни въпроси и проблеми, които не спадат към съответната актуализация.

Необходими условия:

Трябва да имате Visual Studio 2008 Service Pack 1, за да приложите тази актуална корекция.

Изискване за рестартиране

Не трябва да рестартирате компютъра, след като приложите тази актуална корекция.

Информация за заместване на актуалната корекция

Тази актуална корекция не замества други спешни корекции.

Файлова информация

Англоезичната версия на тази спешна корекция има файлови атрибути (или по-нови файлови атрибути), които са изброени в следващата таблица. Датите и часовете за тези файлове са изброени в координирано световно време (UTC). При преглед на информацията за файла, преобразувана в местно време. За да намерите разликата между UTC и местното време, използвайте раздела часова зона в елемента " Дата и час " в контролния панел.

Име на файл

Версия на файла

Размер на файла

Дата

Време

Платформа

C2.dll

15.0.30729. 4082

2,283,320

19 март 2009

05:13

x86

C2.dll

15.0.30729.4082

2,36 1,656

19 март 2009

05:13

x86

C2.dll

15.0.30729.4082

3,01 7,528

19 март 2009

05:13

x64

Link.exe

9.0.30729.4082

1,0 54,520

19 март 2009

05:13

x64

Link.exe

9.0.30729.4082

799, 032

19-Mar-2009

05:13

x86

Заобикаляне на проблема

За да заобиколите този проблем, добавете един или повече членове на сляпо "неподписани знак" за разширяване на размера на структурата или клас най-малката кратно на осем байта. Например разшири 14 байта до 16 байта.

Статус

Microsoft потвърждава, че това е проблем в продуктите на Microsoft, изброени в раздела "Отнася се за".

Допълнителна информация

За повече информация относно терминологията за актуализация на софтуера щракнете върху следния номер на статия, за да я видите в базата данни на Microsoft:

824684 описание на стандартната терминология, използвана за описание на софтуерните актуализации на Microsoft

Стъпки за възпроизвеждане на проблема

  1. Създаване на приложение, което се нарича Test.cpp чрез следния код в 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. Съставяне на приложението с помощта на следната команда:

    CL test.cpp /O2 /MD

Очакван резултат е 4. Но действителния резултат е 0.

Нуждаете ли се от още помощ?

Искате ли още опции?

Разгледайте ползите от абонамента, прегледайте курсовете за обучение, научете как да защитите устройството си и още.

Общностите ви помагат да задавате и отговаряте на въпроси, да давате обратна връзка и да получавате информация от експерти с богати знания.

Беше ли полезна тази информация?

Доколко сте доволни от качеството на езика?
Какво е повлияло на вашия потребителски опит?
Като натиснете „Подаване“, вашата обратна връзка ще се използва за подобряване на продуктите и услугите на Microsoft. Вашият ИТ администратор ще може да събира тези данни. Декларация за поверителност.

Благодарим ви за обратната връзка!

×