Перейти к основному контенту
Поддержка
Войдите с помощью учетной записи Майкрософт
Войдите или создайте учетную запись.
Здравствуйте,
Выберите другую учетную запись.
У вас несколько учетных записей
Выберите учетную запись, с помощью которой нужно войти.

Симптомы

Рассмотрим следующую ситуацию.

  • Создать приложение, которое загружает байт из структуры или класса в Visual Studio 2008 Пакет обновления 1 (SP1).

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

  • Компиляция приложения с помощью конфигурации выпуска для x64 платформы.

В этом случае Неверное смещение, созданный для доступа к члену класса или члена структуры.

Эта проблема возникает, только если размер структуры и смещение или размер класса и смещение равно одному из следующих пар:

  • (14,13)

  • (15,13)

  • (22,21)

  • (23,21)

  • (30,29)

  • (31,29)

Решение

Сведения об исправлении

Исправление от корпорации Майкрософт доступно. Тем не менее он предназначен только для устранения проблемы, описанной в этой статье. Предлагаемое исправление должно применяться исключительно в системах, в которых обнаружена эта специфическая неполадка. Это исправление может проходить дополнительное тестирование. Таким образом, если вы не подвержены серьезно этой проблеме, рекомендуется дождаться следующего пакета обновления для Visual Studio 2008, содержащего это исправление.

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

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

Предварительные условия

Необходимо установить пакет обновления 1 для Visual Studio 2008 для установки этого исправления.

Необходимость перезагрузки

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

Сведения о замене исправлений

Это исправление не заменяет других исправлений.

Сведения о файлах

Английская версия данного исправления содержит атрибуты файла (или более поздние атрибуты файлов), приведенные в следующей таблице. Дата и время для этих файлов указаны в формате общего скоординированного времени (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

Временное решение

Чтобы обойти эту проблему, добавьте один или несколько членов фиктивное «unsigned char» Чтобы расширить размер структуры или класса наименьшее кратным 8 байт. Например расширение 14 байт на 16 байт.

Статус

Корпорация Майкрософт подтверждает, что это проблема продуктов Майкрософт, перечисленных в разделе "Относится к".

Дополнительные сведения

Для получения дополнительных сведений о терминологии обновлений программного обеспечения щелкните следующий номер статьи базы знаний Майкрософт:

Описание 824684 Стандартные термины, используемые при описании обновлений программных продуктов Майкрософт

Действия по воспроизведению проблемы

  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/MD/O2

Ожидаемый результат равен 4. Тем не менее фактический результат равен 0.

Нужна дополнительная помощь?

Нужны дополнительные параметры?

Изучите преимущества подписки, просмотрите учебные курсы, узнайте, как защитить свое устройство и т. д.

В сообществах можно задавать вопросы и отвечать на них, отправлять отзывы и консультироваться с экспертами разных профилей.

Были ли сведения полезными?

Насколько вы удовлетворены качеством перевода?
Что повлияло на вашу оценку?
После нажатия кнопки "Отправить" ваш отзыв будет использован для улучшения продуктов и служб Майкрософт. Эти данные будут доступны для сбора ИТ-администратору. Заявление о конфиденциальности.

Спасибо за ваш отзыв!

×