Sintomas
Considere o seguinte cenário:
-
Habilitar a opção de otimização global (/Og), permitindo que uma das opções a seguir:
-
/O1
-
/O2
-
/Ox
-
-
Criar um arquivo de origem do Microsoft Visual C++ usando o Microsoft Visual Studio 2008 Service Pack 1 (SP1).
-
O arquivo de origem chama a função setjmp , a função longjmp ou as duas funções.
Nesse cenário, o compilador pode usar o mesmo deslocamento de pilha para armazenar variáveis locais diferentes. Portanto, um comportamento inesperado pode ocorrer quando você executar o aplicativo gerado.
Causa
Esse problema ocorre porque o otimizador não conta a função de setjmp ou o longjmp . Isso faz com que o optimizer calcular incorretamente o tempo de vida de variáveis locais. Quando uma variável é alterada, outra variável pode ser alterado inesperadamente.
Resolução
Informações sobre o hotfix
Um hotfix compatível foi disponibilizado pela Microsoft. No entanto, esse hotfix destina-se a corrigir somente o problema descrito neste artigo. Aplique este hotfix somente nos sistemas que estiverem enfrentando o problema descrito neste artigo. Esta correção poderá ser submetida a testes adicionais. Portanto, se esse problema não o prejudicar, recomendamos que você aguarde a próxima atualização de software que contenha esse hotfix. Para resolver esse problema imediatamente, contate o Atendimento Microsoft para obter o hotfix. Para obter uma lista completa dos números de telefone do Atendimento Microsoft e suporte ou para criar uma solicitação de serviço separada, visite o seguinte site da Microsoft:
http://support.microsoft.com/contactus/?ws=supportObservação Em alguns casos, as taxas cobradas pelas ligações para o suporte podem ser canceladas se um profissional de suporte da Microsoft determinar que uma atualização específica resolverá o problema. Os custos normais de suporte serão aplicados para questões de suporte adicionais e problemas que não se qualificam à atualização específica em questão. Para baixar esse hotfix da Galeria de código do Microsoft Developer Network (MSDN), visite o seguinte site da Microsoft:
http://code.msdn.microsoft.com/KB2498381Observação O MSDN Code Gallery exibe os idiomas para os quais o hotfix está disponível. Se você não vir seu idioma listado, é porque a página de recursos da Galeria de código não está disponível para esse idioma. Ou, você pode baixar esse hotfix do seguinte site do Microsoft Connect:
https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=34826
Pré-requisitos
Para aplicar esse hotfix, você deve ter o Microsoft Visual Studio 2008 Service Pack 1 instalado.
Informações de reinicialização
Você não precisa reiniciar o computador após instalar esse hotfix se você interrompeu a todas as instâncias do Visual Studio.
Informações sobre a substituição de hotfixes
Esse hotfix não substitui nenhum hotfix lançado anteriormente.
Informações sobre o arquivo
A versão global deste hotfix instala arquivos que têm os atributos listados nas tabelas a seguir. As datas e as horas desses arquivos estão listadas em formato UTC (Tempo Universal Coordenado). As datas e as horas desses arquivos no seu computador local são exibidas na hora local, com o ajuste do horário de verão atual. Além disso, as datas e as horas poderão ser alteradas quando você realizar algumas operações nos arquivos.
Nome do arquivo |
Versão do arquivo |
Tamanho do arquivo |
Data |
Hora |
Plataforma |
---|---|---|---|---|---|
C2.dll |
15.0.30729.6147 |
2,283,840 |
25 de fevereiro de 2011 |
01:25 |
x86 |
C2.dll |
15.0.30729.6147 |
2,362,688 |
25 de fevereiro de 2011 |
01:25 |
x86 |
C2.dll |
15.0.30729.6147 |
2,493,248 |
25 de fevereiro de 2011 |
01:25 |
x86 |
C2.dll |
15.0.30729.6147 |
3,018,048 |
25 de fevereiro de 2011 |
01:25 |
x64 |
C2.dll |
15.0.30729.6147 |
7,263,040 |
25-Feb-2011 |
01:25 |
IA-64 |
Link.exe |
9.0.30729.6147 |
1,055,560 |
25 de fevereiro de 2011 |
01:25 |
x64 |
Link.exe |
9.0.30729.6147 |
2,135,368 |
25-Feb-2011 |
01:25 |
IA-64 |
Link.exe |
9.0.30729.6147 |
800,584 |
25-Feb-2011 |
01:25 |
x86 |
Solução alternativa
Para contornar esse problema, inicialize as variáveis locais no início da função para que o compilador possa estar ciente do tempo de vida as variáveis.
Status
A Microsoft confirmou que este é um problema nos produtos Microsoft listados na seção "Aplicável a".
Informações adicionais
Para obter mais informações sobre a terminologia de atualização de software, clique no número abaixo para ler o artigo na Base de Conhecimento da Microsoft:
824684 Descrição da terminologia padrão utilizada para descrever as atualizações de software da Microsoft