Sintomas
Considere o seguinte cenário:
-
Tem um projecto de Visual C++ 2010. O código de origem do projecto tem uma estrutura ou classe que excede os 64 bytes.
-
Criar o projecto para uma plataforma baseada em x64 e utilizar a opção do compilador de /O2 .
-
Execute a aplicação.
Neste cenário, ocorre uma violação de acesso e a aplicação falha.
Causa
Este problema ocorre porque o compilador baseadas em x64 do Visual Studio 2010 optimiza o código, ajustando o alinhamento de atribuição de dados de 64 bytes para 16 bytes. Por conseguinte, um problema de memória ocorre para os objectos que excedem 64 bytes.
Resolução
Informações sobre correção
Existe uma correção suportada pela Microsoft. No entanto, esta correção destina-se apenas a corrigir o problema descrito neste artigo. Aplique esta correcção apenas em sistemas que tenham este problema específico. 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 transferir esta correcção a partir da Galeria de códigos MSDN, visite o seguinte Web site da Microsoft:
http://code.msdn.microsoft.com/KB2280741Nota 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. Nota Caso ocorram problemas adicionais ou se for necessária a resolução de problemas, poderá ter de criar um pedido de assistência separado. Os custos de normais do suporte serão aplicados a questões de suporte adicional e problemas incluídos nesta correção específica. 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=supportTambém pode transferir esta correcção, visitando o seguinte Web site da Microsoft:
https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=31433
Pré-requisitos
Para aplicar esta correcção, tem de ter o Visual Studio 2010 instalado.
Requisito de reinício
Não é necessário reiniciar o computador depois de aplicar a correcção.
Informações sobre substituição de correções
Esta correcção não substitui quaisquer outras correcções.
Informações de ficheiro
A versão inglesa desta correção tem os atributos de ficheiro listados na tabela que se segue (ou atributos de ficheiro posteriores). As datas e horas destes ficheiros estão listadas no formato de Hora Universal Coordenada (UTC). Quando visualizar as informações dos ficheiros, estas serão convertidas na hora local. Para determinar a diferença entre a UTC e a hora local, utilize o separador Fuso horário no item data e hora no painel de controlo.
Nome do ficheiro |
Versão do ficheiro |
Tamanho do ficheiro |
Data |
Hora |
Plataforma |
---|---|---|---|---|---|
C2.dll |
16.0.30319.345 |
2,510,144 |
01-Aug-2010 |
23:42 |
x86 |
C2.dll |
16.0.30319.345 |
2,588,480 |
01-Aug-2010 |
23:42 |
x86 |
C2.dll |
16.0.30319.345 |
2,630,976 |
01-Aug-2010 |
23:42 |
x86 |
C2.dll |
16.0.30319.345 |
2,977,088 |
01-Aug-2010 |
23:42 |
x64 |
C2.dll |
16.0.30319.345 |
7,351,616 |
01-Aug-2010 |
23:42 |
IA-64 |
Solução
Para contornar este problema, utilize a opção do compilador /O2 quando criar o projecto.
Estado
A Microsoft confirmou que este problema ocorre nos produtos da Microsoft listados na secção "Aplica-se a".