CORRECÇÃO: Um comportamento inesperado quando executa uma aplicação gerada do Visual Studio 2008 Service Pack 1 que chama a função de setjmp ou a longjmp num ficheiro de origem

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

Precisa de mais ajuda?

Aumente os seus conhecimentos
Explore as formações
Seja o primeiro a obter novas funcionalidades
Aderir ao Microsoft insiders

As informações foram úteis?

Obrigado pelos seus comentários!

×