ИСПРАВИТЬ: Неожиданное поведение при выполнении созданного приложения Пакет обновления 1 для Visual Studio 2008, вызывает функцию setjmp и longjmp функции в исходном файле


Проблемы


Рассмотрим следующий сценарий.
  • Отметьте опцию глобальной оптимизации (/og/Og) с помощью одного из следующих параметров:
    • /O1 
    • /O2 
    • /Ox 
  • Создание исходного файла Microsoft Visual C++ с помощью Microsoft Visual Studio 2008 Пакет обновления 1 (SP1).
  • Исходный файл вызывает функцию setjmp , функция longjmp или обе функции.
В этом случае компилятор может использовать смещения стека для хранения локальных переменных. Таким образом может привести к возникновению проблем при выполнении созданного приложения.

Причина


Эта проблема возникает, потому что оптимизатор не учитывает setjmp функция или функция longjmp . Это заставляет оптимизатор неправильно рассчитать время существования локальных переменных. При изменении одной переменной другой переменной может быть изменено неожиданно.

Решение


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

Существует исправление от корпорации Майкрософт. Однако данное исправление предназначено для устранения только проблемы, что описана в этой статье. Применяйте это исправление только в тех случаях, когда наблюдается проблема, описанная в данной статье. Это исправление может проходить дополнительное тестирование. Таким образом если вы не подвержены серьезно этой проблеме, рекомендуется дождаться следующего пакета обновления, содержащего это исправление. Для немедленного решения этой проблемы обратитесь в службу поддержки пользователей Майкрософт для получения исправления. Для получения полного списка телефонов поддержки и обслуживания клиентов корпорации Майкрософт, или для создания отдельного запроса на обслуживание, посетите следующий веб-сайт Майкрософт: Примечание. В особых случаях оплата, предусмотренная за обращение в службу поддержки может быть отменена, если специалист службы технической поддержки Майкрософт определит, что обновление будет решением проблемы. Затраты на обычные услуги службы поддержки будут применяться к дополнительным вопросам и проблемам, которые не охватываются конкретным обновлением. Чтобы загрузить это исправление из коллекции кода Microsoft Developer Network (MSDN), посетите следующий веб-узел корпорации Майкрософт:Примечание. Коллекции кода MSDN отображаются языки, для которых доступно исправление. Если в списке язык не отображается, это недоступности страница коллекции кода для этого языка. Или можно загрузить это исправление из следующей веб-сайте Microsoft Connect:

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

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

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

После остановки всех экземпляров Visual Studio установки данного исправления перезагружать компьютер не требуется.

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

Это исправление не заменяет ранее выпущенные исправления.

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

Глобальная версия этого исправления устанавливает файлы с атрибутами, которые указаны в приведенных ниже таблицах. Даты и время для файлов указаны в формате UTC. Даты и время для этих файлов на локальном компьютере отображаются с учетом часового пояса и перехода на летнее время. Кроме того, даты и время могут изменяться при выполнении определенных операций с файлами.
Имя файлаВерсия файлаРазмер файладатаВремяПлатформа
C2.dll15.0.30729.61472,283,84025 февраля 2011 г.01:25x86
C2.dll15.0.30729.61472,362,68825 февраля 2011 г.01:25x86
C2.dll15.0.30729.61472,493,24825 февраля 2011 г.01:25x86
C2.dll15.0.30729.61473,018,04825 февраля 2011 г.01:25x64
C2.dll15.0.30729.61477,263,04025-Feb-201101:25IA-64
Link.exe9.0.30729.61471,055,56025 февраля 2011 г.01:25x64
Link.exe9.0.30729.61472,135,36825-Feb-201101:25IA-64
Link.exe9.0.30729.6147800,58425-Feb-201101:25x86

Обходное решение


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

Статус


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

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


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