Remediere: Un comportament neașteptat atunci când executați o aplicație generat Visual Studio 2008 Service Pack 1, care apelează funcția setjmp sau funcția longjmp într-un fișier sursă


Simptome


Să luăm în considerare următorul scenariu:
  • Activați opțiunea de optimizare global (/Og) activând una dintre următoarele opțiuni:
    • /O1 
    • /O2 
    • /Ox 
  • Construi un fişier sursă Microsoft Visual C++ utilizând Microsoft Visual Studio 2008 Service Pack 1 (SP1).
  • Fişierul sursă apelează funcția setjmp , funcția longjmp sau ambele funcţii.
În acest scenariu, compilator poate utiliza același deplasament de stivă pentru a stoca diferite variabile locale. De aceea, poate apărea un comportament neașteptat atunci când executați aplicația generat.

Cauză


Această problemă apare deoarece optimizer nu cont pentru funcția setjmp sau funcția longjmp . Acest lucru provoacă optimizer să calculeze incorect durata de viaţă a variabilelor locale. Când se modifică o variabilă, o altă variabilă poate fi modificat în mod neașteptat.

Rezolvare


Informații despre remedierea rapidă

O remediere rapidă compatibilă este disponibilă de la Microsoft. Cu toate acestea, scopul său este de a corecta numai problema descrisă în acest articol. Aplicați această remediere rapidă numai pentru sistemele care întâmpină problema descrisă în acest articol. Această remediere rapidă poate să necesite testare suplimentară. De aceea, dacă nu sunteți grav afectat de această problemă, vă recomandăm să aşteptaţi următoarea actualizare software care conţine această remediere rapidă. Pentru a rezolva imediat problema, contactaţi serviciile de asistență pentru clienți Microsoft pentru a obține remedierea rapidă. Pentru o listă completă cu numerele de telefon ale clienților servicii și asistență Microsoft sau pentru a crea o solicitare de asistenţă separată, vizitați următorul site Web Microsoft: Notă În cazuri speciale, costurile implicate de obicei pentru apelurile de asistență pot fi revocate dacă un specialist de la Asistență Microsoft stabilește că o anumită actualizare va rezolva problema. Se vor aplica costurile uzuale de asistenţă pentru întrebări suplimentare de asistenţă şi pentru probleme ce nu fac obiectul actualizării în cauză. Pentru a descărca această remediere rapidă de la Microsoft Developer Network (MSDN) Code Gallery, vizitați următorul site Web Microsoft:Notă MSDN Code Gallery afișează limbile pentru care este disponibilă remedierea rapidă. Dacă nu vedeți limba dvs. listată, înseamnă că pagina de resurse Code Gallery nu este disponibil pentru limba respectivă. Sau, aveți posibilitatea să descărcați această remediere rapidă de la următorul site Web Microsoft Connect:

Cerinţe preliminare

Pentru a aplica această remediere rapidă, trebuie să aveți Microsoft Visual Studio 2008 Service Pack 1 instalat.

Informații despre repornire

Nu trebuie să reporniți computerul după ce instalați această remediere rapidă, dacă ați oprit toate instanțele de Visual Studio.

Informații despre înlocuirea remedierilor rapide

Această remediere rapidă nu înlocuiește o remediere rapidă lansată anterior.

Informații despre fișier

Versiunea globală a acestei remedieri rapide instalează fişierele care au atributele care sunt listate în următoarele tabele. Datele şi orele pentru aceste fişiere sunt exprimate în Timpul universal (UTC). Datele și orele pentru aceste fișiere pe computerul local sunt afișate în ora locală, luându-se în calcul decalajul actual pentru ora de vară (DST). În plus, datele şi orele se pot modifica atunci când efectuaţi anumite operaţiuni asupra fişierelor.
Nume de fișierVersiune fișierDimensiune fișierDataOraPlatformă
C2.dll15.0.30729.61472,283,84025-Feb-201101:25x86
C2.dll15.0.30729.61472,362,68825-Feb-201101:25x86
C2.dll15.0.30729.61472,493,24825-Feb-201101:25x86
C2.dll15.0.30729.61473,018,04825-Feb-201101:25x64
C2.dll15.0.30729.61477,263,04025-Feb-201101:25IA-64
Link.exe9.0.30729.61471,055,56025-Feb-201101:25x64
Link.exe9.0.30729.61472,135,36825-Feb-201101:25IA-64
Link.exe9.0.30729.6147800,58425-Feb-201101:25x86

Soluție de evitare


Pentru a rezolva această problemă, inițializează variabile locale în funcția, astfel încât compilator poate fi conștient de variabile de viaţă.

Stare


Microsoft a confirmat că aceasta este o problemă în produsele Microsoft enumerate în secțiunea „Se aplică la”.

Mai multe informații


Pentru mai multe informaţii despre terminologia privind actualizarea software-ului, faceţi clic pe următorul număr de articol pentru a vedea articolul în Baza de cunoştinţe Microsoft:
824684 Descrierea terminologiei standard care este utilizată pentru a descrie actualizările de software Microsoft