Accedi con Microsoft
Accedi o crea un account.
Salve,
Seleziona un altro account.
Hai più account
Scegli l'account con cui vuoi accedere.

Sintomi

Si consideri il seguente scenario.

  • Si crea un'applicazione che carica un byte da una struttura o da una classe in Microsoft Visual Studio 2008 Service Pack 1 (SP1).

  • Attivare l'opzione di ottimizzazione /Ox o l'opzione di ottimizzazione /O2 .

  • Compilare l'applicazione utilizzando una configurazione di rilascio per la x64 piattaforma.

In questo scenario, l'offset che viene generato per accedere al membro della struttura o il membro della classe non è corretto.

Questo problema si verifica solo quando la dimensione della struttura e l'offset o la dimensione di classe e l'offset è uguale a una delle seguenti coppie:

  • (14,13)

  • (15,13)

  • (22,21)

  • (23,21)

  • (30,29)

  • (31,29)

Risoluzione

Informazioni sull'hotfix

Un hotfix supportato è ora disponibile da Microsoft. Tuttavia è destinato esclusivamente alla risoluzione del problema descritto in questo articolo. Applicarlo solo ai sistemi in cui si verificano questo problema specifico. Questo hotfix potrebbe essere sottoposto ad ulteriori test. Pertanto, se il problema non causa gravi difficoltà, consiglia di attendere la versione successiva del Service pack di Visual Studio 2008 contenente tale hotfix.

Per risolvere immediatamente questo problema, contattare il supporto tecnico clienti Microsoft per ottenere l'hotfix. Per un elenco completo dei numeri di telefono supporto tecnico clienti Microsoft e informazioni sui costi dell'assistenza, visitare il seguente sito Web Microsoft:

http://support.microsoft.com/contactus/?ws=supportNota: In casi particolari, le spese normalmente addebitate per le chiamate di supporto potrebbero essere annullate qualora un addetto al supporto Microsoft determina che uno specifico aggiornamento risolverà il problema. I costi di supporto normale verranno applicati per eventuali ulteriori domande e problemi che non dovessero rientrare nello specifico aggiornamento in questione.

Prerequisiti

È necessario disporre di Visual Studio 2008 Service Pack 1 per applicare questo hotfix.

Richiesta di riavvio

Non è necessario riavviare il computer dopo avere applicato questo hotfix.

Informazioni sulla sostituzione dell'aggiornamento rapido

Questo hotfix non sostituisce eventuali altri aggiornamenti rapidi.

Informazioni sui file

La versione inglese di questo hotfix presenta gli attributi di file (o attributi successivi) elencati nella tabella riportata di seguito. Le date e ore dei file sono elencate in base al formato UTC (Coordinated Universal Time Coordinated). Quando si visualizzano le informazioni sul file, viene convertito in ora locale. Per calcolare la differenza tra ora UTC e ora locale, utilizzare la scheda fuso orario nell'elemento di Data e ora nel Pannello di controllo.

Nome del file

Versione del file

Dimensione del file

Data

Ora

Piattaforma

C2.dll

15.0.30729. 4082

2,283,320

19-Mar-2009

05:13

x86

C2.dll

15.0.30729.4082

2,36 1,656

19-Mar-2009

05:13

x86

C2.dll

15.0.30729.4082

3,01 7,528

19-Mar-2009

05:13

x64

Link.exe

9.0.30729.4082

1,0 54,520

19-Mar-2009

05:13

x64

Link.exe

9.0.30729.4082

799, 032

19-Mar-2009

05:13

x86

Soluzione alternativa

Per risolvere questo problema, aggiungere uno o più membri fittizio "unsigned char" per estendere la dimensione della struttura o della classe al multiplo più piccolo di otto byte. Ad esempio, estendere 14 byte a 16 byte.

Stato

Microsoft ha confermato che questo è un problema dei prodotti Microsoft elencati nella sezione "Si applica a".

Ulteriori informazioni

Per ulteriori informazioni sulla terminologia degli aggiornamenti software, fare clic sul seguente numero di articolo per visualizzare l'articolo della Microsoft Knowledge Base:

824684 descrizione della terminologia standard utilizzata per descrivere gli aggiornamenti software Microsoft

Procedura per riprodurre il problema

  1. Creare un'applicazione denominata test. cpp utilizzando il seguente codice in Visual Studio 2008 SP1:

    typedef struct DskDecimal
    {
    unsigned char precision;
    unsigned char scaleFactor;
    unsigned short value[ 5];
    unsigned char maxPrecision;
    unsigned char maxScaleFactor;
    } DskDecimal;

    int main()
    {
    DskDecimal decimal;
    decimal.maxScaleFactor = 4;
    DskDecimal self = decimal;
    return self.maxScaleFactor;
    }
  2. Compilare l'applicazione utilizzando il comando seguente:

    test. cpp CL /O2 /MD

Il risultato previsto è 4. Tuttavia, il risultato effettivo è 0.

Serve aiuto?

Vuoi altre opzioni?

Esplorare i vantaggi dell'abbonamento e i corsi di formazione, scoprire come proteggere il dispositivo e molto altro ancora.

Le community aiutano a porre e a rispondere alle domande, a fornire feedback e ad ascoltare gli esperti con approfondite conoscenze.

Queste informazioni sono risultate utili?

Come valuti la qualità della lingua?
Cosa ha influito sulla tua esperienza?
Premendo Inviare, il tuo feedback verrà usato per migliorare i prodotti e i servizi Microsoft. L'amministratore IT potrà raccogliere questi dati. Informativa sulla privacy.

Grazie per il feedback!

×