Sintomas
Considere o seguinte cenário:
-
Activar a opção de optimização global (/Og), permitindo uma das seguintes opções:
-
/O1
-
/O2
-
/Ox
-
-
Criar um ficheiro de origem do Microsoft Visual C++, utilizando o Microsoft Visual Studio 2008 Service Pack 1 (SP1).
-
O ficheiro de origem chama a função de setjmp , a função de longjmp ou ambas as funções.
Neste cenário, o compilador pode utilizar o mesmo desvio de pilha para armazenar variáveis locais diferentes. Assim, poderá ocorrer um comportamento inesperado quando executa a aplicação gerada.
Causa
Este problema ocorre porque o Optimizador não conta para a função de setjmp ou a função longjmp . Isto faz com que o Optimizador calcule incorrectamente a validade das variáveis locais. Quando uma variável é alterada, outra variável pode ser alterada inesperadamente.
Resolução
Informações sobre correção
Existe uma correção suportada pela Microsoft. No entanto, esta correcção destina-se apenas a corrigir o problema descrito neste artigo. Aplique esta correção apenas em sistemas que tenham o problema descrito neste artigo. Esta correcção poderá ser submetida a testes adicionais. Por conseguinte, se não estiver a ser gravemente afetado por este problema, recomendamos que aguarde pela próxima atualização de software que contenha esta correção. Para resolver este problema imediatamente, contacte o suporte técnico da Microsoft para obter a correcção. Para uma lista completa dos números de telefone de suporte e serviço de cliente da Microsoft ou para criar um pedido de assistência separado, visite o seguinte site da Microsoft:
http://support.microsoft.com/contactus/?ws=supportNota Em casos especiais, os custos normalmente inerentes às chamadas de suporte poderão ser anulados se um Técnico de Suporte da Microsoft determinar que uma atualização específica resolverá o problema. Os custos de normais do suporte serão aplicados a questões de suporte adicionais e problemas que não se enquadrem na atualização específica em questão. Para transferir esta correcção a partir da Galeria de código de Microsoft Developer Network (MSDN), visite o seguinte Web site da Microsoft:
http://code.msdn.microsoft.com/KB2498381Nota Galeria de códigos MSDN apresenta os idiomas nos quais a correcção está disponível. Se não vir o idioma listado, é porque a página de recursos da Galeria de códigos não está disponível para esse idioma. Em alternativa, pode transferir esta correcção a partir do seguinte Web site Microsoft Connect:
https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=34826
Pré-requisitos
Para aplicar esta correcção, tem de ter o Microsoft Visual Studio 2008 Service Pack 1 instalado.
Informações sobre reinício
Não é necessário reiniciar o computador depois de instalar esta correcção se interrompeu a todas as instâncias do Visual Studio.
Informações sobre substituição de correções
Esta correção não substitui uma correção disponibilizada anteriormente.
Informações de ficheiro
A versão global desta correção instala ficheiros que têm os atributos listados nas tabelas seguintes. As datas e horas destes ficheiros são listadas na Hora Universal Coordenada (UTC). As datas e horas destes ficheiros no computador local são apresentadas na hora local em conjunto com a compensação de hora de Verão (DST) atual. Além disso, as datas e horas podem ser alteradas quando são executadas determinadas operações nos ficheiros.
Nome do ficheiro |
Versão do ficheiro |
Tamanho do ficheiro |
Data |
Hora |
Plataforma |
---|---|---|---|---|---|
C2.dll |
15.0.30729.6147 |
2,283,840 |
25-Fev-2011 |
01:25 |
x86 |
C2.dll |
15.0.30729.6147 |
2,362,688 |
25-Fev-2011 |
01:25 |
x86 |
C2.dll |
15.0.30729.6147 |
2,493,248 |
25-Fev-2011 |
01:25 |
x86 |
C2.dll |
15.0.30729.6147 |
3,018,048 |
25-Fev-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-Fev-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
Para contornar este problema, inicialize as variáveis locais mais cedo na função para que o compilador pode ter em consideração a duração das variáveis.
Estado
A Microsoft confirmou que este problema ocorre nos produtos da Microsoft listados na secção "Aplica-se a".
Mais Informações
Para mais informações sobre a terminologia de atualização de software, clique no seguinte número de artigo para visualizar o artigo na Base de Dados de Conhecimento Microsoft:
824684Descrição da terminologia padrão utilizada para descrever as atualizações de software da Microsoft