ΕΠΙΔΙΌΡΘΩΣΗ: Απροσδόκητη συμπεριφορά όταν εκτελείτε μια εφαρμογή που δημιουργήθηκε Visual Studio 2008 Service Pack 1 που καλεί τη συνάρτηση setjmp ή τη συνάρτηση longjmp σε ένα αρχείο προέλευσης δεδομένων


Συμπτώματα


Εξετάστε το ακόλουθο σενάριο:
  • Μπορείτε να ενεργοποιήσετε την επιλογή βελτιστοποίησης καθολικό (/Og), ενεργοποιώντας μία από τις παρακάτω επιλογές:
    • /O1 
    • /O2 
    • /Ox 
  • Μπορείτε να δημιουργήσετε ένα αρχείο προέλευσης δεδομένων του Microsoft Visual C++, χρησιμοποιώντας το Microsoft Visual Studio 2008 Service Pack 1 (SP1).
  • Το αρχείο προέλευσης καλεί τη συνάρτηση setjmp , η συνάρτηση longjmp ή και οι δύο συναρτήσεις.
Σε αυτό το σενάριο, το πρόγραμμα μεταγλώττισης ενδέχεται να χρησιμοποιήσετε την ίδια μετατόπιση στοίβα για να αποθηκεύσετε διαφορετικές τοπικές μεταβλητές. Επομένως, μη αναμενόμενη συμπεριφορά ενδέχεται να παρουσιαστεί όταν εκτελείτε την εφαρμογή που δημιουργήθηκε.

Αιτία


Αυτό το ζήτημα παρουσιάζεται επειδή η βελτιστοποίηση δεν ελέγχει τη συνάρτηση setjmp ή τη συνάρτηση longjmp . Αυτό έχει ως αποτέλεσμα την "Βελτιστοποίηση" για να υπολογίσει σωστά τη διάρκεια ζωής του τοπικές μεταβλητές. Όταν αλλάζει μία μεταβλητή, μια άλλη μεταβλητή μπορεί να άλλαξε απροσδόκητα.

Επίλυση


Πληροφορίες άμεσης επιδιόρθωσης

Μια υποστηριζόμενη άμεση επιδιόρθωση είναι διαθέσιμη από τη Microsoft. Ωστόσο, αυτή η επείγουσα επιδιόρθωση προορίζεται για τη διόρθωση μόνο του ζητήματος που περιγράφεται σε αυτό το άρθρο. Εφαρμόστε αυτήν την άμεση επιδιόρθωση μόνο σε συστήματα που αντιμετωπίζουν το πρόβλημα που περιγράφεται σε αυτό το άρθρο. Αυτή η άμεση επιδιόρθωση ενδέχεται να υποβληθεί σε πρόσθετο έλεγχο. Επομένως, εάν αυτό το ζήτημα δεν σας επηρεάζει ιδιαίτερα, σας συνιστούμε να περιμένετε έως την επόμενη ενημέρωση λογισμικού που περιέχει αυτήν την άμεση επιδιόρθωση. Για να επιλύσετε αυτό το ζήτημα αμέσως, επικοινωνήστε με υπηρεσίες υποστήριξης πελατών της Microsoft για να αποκτήσετε την επείγουσα επιδιόρθωση. Για την πλήρη λίστα αριθμών τηλεφώνου υποστήριξης και εξυπηρέτησης πελατών της Microsoft ή για να δημιουργήσετε ξεχωριστή αίτηση εξυπηρέτησης, επισκεφθείτε την ακόλουθη τοποθεσία της Microsoft στο Web: Σημείωση Σε ειδικές περιπτώσεις, εάν ένας μηχανικός υποστήριξης της Microsoft κρίνει ότι μια συγκεκριμένη ενημερωμένη έκδοση θα επιλύσει το ζήτημά σας, ενδέχεται να μην ισχύσουν οι χρεώσεις που υφίστανται κανονικά για κλήσεις υποστήριξης. Οι συνηθισμένες χρεώσεις υποστήριξης θα ισχύει για πρόσθετες ερωτήσεις υποστήριξης και για θέματα που δεν αφορούν τη συγκεκριμένη ενημερωμένη έκδοση. Για να κάνετε λήψη αυτής της επείγουσας επιδιόρθωσης από τη συλλογή του κώδικα Microsoft Developer Network (MSDN), επισκεφθείτε την ακόλουθη τοποθεσία της Microsoft στο Web:Σημείωση Η συλλογή κωδίκων MSDN εμφανίζει τις γλώσσες για τις οποίες η επείγουσα επιδιόρθωση είναι διαθέσιμη. Εάν δεν βλέπετε τη γλώσσα σας στη λίστα, είναι επειδή η σελίδα πόρου συλλογής κώδικα δεν είναι διαθέσιμη για αυτήν τη γλώσσα. Ή, μπορείτε να κάνετε λήψη αυτής της επείγουσας επιδιόρθωσης από την ακόλουθη τοποθεσία Web Microsoft Connect:

Προϋποθέσεις

Για να εφαρμόσετε αυτήν την επείγουσα επιδιόρθωση, πρέπει να έχετε Microsoft Visual Studio 2008 Service Pack 1 εγκατεστημένο.

Πληροφορίες επανεκκίνησης

Δεν χρειάζεται να επανεκκινήσετε τον υπολογιστή μετά την εγκατάσταση αυτής της επείγουσας επιδιόρθωσης, εάν έχετε διακόψει όλες τις εμφανίσεις του Visual Studio.

Πληροφορίες αντικατάστασης άμεσης επιδιόρθωσης

Αυτή η άμεση επιδιόρθωση δεν αντικαθιστά μια άμεση επιδιόρθωση που κυκλοφόρησε στο παρελθόν.

Πληροφορίες αρχείου

Η καθολική έκδοση αυτής της ενημέρωσης εγκαθιστά αρχεία με τα χαρακτηριστικά που αναφέρονται στους ακόλουθους πίνακες. Οι ημερομηνίες και οι ώρες για τα αρχεία αυτά αναφέρονται σε συντονισμένη παγκόσμια ώρα (UTC). Οι ημερομηνίες και οι ώρες αυτών των αρχείων στον τοπικό σας υπολογιστή εμφανίζονται στην τοπική σας ώρα μαζί με τις τρέχουσες ρυθμίσεις θερινής ώρας (DST). Επίσης, οι ημερομηνίες και οι ώρες ενδέχεται να αλλάξουν όταν εκτελείτε συγκεκριμένες λειτουργίες στα αρχεία.
Όνομα αρχείουΈκδοση αρχείουΜέγεθος αρχείουΗμερομηνίαΏραΠλατφόρμα
C2.dll15.0.30729.61472,283,84025-Φεβ-201101:25x86
C2.dll15.0.30729.61472,362,68825-Φεβ-201101:25x86
C2.dll15.0.30729.61472,493,24825-Φεβ-201101:25x86
C2.dll15.0.30729.61473,018,04825-Φεβ-201101:25x64
C2.dll15.0.30729.61477,263,04025-Feb-201101:25IA-64
Link.exe9.0.30729.61471,055,56025-Φεβ-201101:25x64
Link.exe9.0.30729.61472,135,36825-Feb-201101:25IA-64
Link.exe9.0.30729.6147800,58425-Feb-201101:25x86

Λύση


Για να επιλύσετε αυτό το πρόβλημα, προετοιμάστε τοπικές μεταβλητές νωρίς στη συνάρτηση έτσι ώστε να γνωρίζετε της διάρκειας ζωής των μεταβλητών του μεταγλωττιστή.

Κατάσταση


Η Microsoft έχει επιβεβαιώσει ότι πρόκειται για ένα ζήτημα των προϊόντων της Microsoft που παρατίθενται στην ενότητα "Ισχύει για".

Περισσότερες πληροφορίες


Για περισσότερες πληροφορίες σχετικά με την ορολογία των ενημερώσεων λογισμικού, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο στη Γνωσιακή Βάση της Microsoft:
824684 Περιγραφή της βασικής ορολογίας που χρησιμοποιείται για την περιγραφή ενημερώσεων λογισμικού της Microsoft