Перейти до основного
Підтримка
Вхід
Вхід за допомогою облікового запису Microsoft
Увійдіть або створіть обліковий запис.
Вітаємо,
Виберіть інший обліковий запис.
У вас є кілька облікових записів
Виберіть обліковий запис, за допомогою якого потрібно ввійти.

Причини

Розглянемо наведений нижче випадок.

  • Створення застосунків, які завантажуються байт, структуру або класу в Microsoft Visual Studio 2008 з пакетом оновлень 1 (SP1).

  • Вимкнути параметр /Ox оптимізація або оптимізація параметр /O2 .

  • Компіляції програми за допомогою випуск конфігурації в x64 платформи.

У цьому випадку неправильний зсув, яка створюється для доступу до структури члена або членів класу.

Ця проблема виникає, лише після розмір структури та зсув або розмір класу та зсув дорівнює один із таких пар:

  • (14,13)

  • (15,13)

  • (22,21)

  • (23,21)

  • (30,29)

  • (31,29)

Вирішення

Відомості про виправлень

Корпорація Майкрософт випустила підтримуване виправлення доступна. Проте призначена для вирішення проблеми, описаної в цій статті. Він придатний лише для систем, які зазнають цієї конкретної проблеми. Те, що це виправлення може потребувати додаткового тестування. Таким чином, якщо ви не завдає значної, ми рекомендуємо чекати далі Visual Studio 2008 пакет оновлень, що містить це виправлення.

Щоб негайно вирішити цю проблему, зверніться до служби підтримки Microsoft, щоб отримати виправлення. Повний перелік телефонів служби підтримки користувачів корпорації Майкрософт а також відомості про вартість обслуговування відвідайте веб-сайт корпорації Майкрософт:

http://support.microsoft.com/contactus/?ws=supportПримітка. В окремих випадках оплату звернення до служби підтримки може бути скасовано якщо технічної підтримки Майкрософт визначить, що телефонів служби. Плата стягується на додаткові питання і проблеми, які не пов'язані з оновленням.

Попередні вимоги

Потрібно мати Visual Studio 2008 з пакетом оновлень 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

Виправлення помилок

Щоб тимчасово усунути цю проблему, додайте до одного або кількох членів фіктивний "підписано символ" продовжити розмір структури або класу на найменше декількох 8 байт. Наприклад, розширення, 14 байт 16 байт.

Стан

Корпорація Майкрософт підтвердила існування цієї неполадки у продуктах Майкрософт, перелічених у розділі "Застосовується до".

Додаткові відомості

Щоб отримати додаткові відомості про термінологію оновлення програмного забезпечення, клацніть цей номер статті в базі знань Microsoft:

824684 Опис стандартну термінологію, яка використовується для опису оновлень програмного забезпечення Microsoft

Як відтворити проблему

  1. Створіть застосунок, який називається Test.cpp, за допомогою наведений нижче код Visual Studio 2008 пакетом оновлень 1:

    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. Ваш ІТ-адміністратор зможе збирати ці дані. Декларація про конфіденційність.

Дякуємо за відгук!

×