Symptomy
Rozpatrzmy następujący scenariusz:
-
Masz projektu programu Visual C++ 2010. Kod źródłowy projektu ma struktury lub klasy, która przekracza 64 bajtów.
-
Skompiluj projekt platformy x64-bitowych, i użyj opcji kompilatora/O2 .
-
Uruchom aplikację.
W tym scenariuszu występuje błąd naruszenia zasad dostępu i awarie aplikacji.
Przyczyna
Ten problem występuje, ponieważ x64-bitowych kompilator programu Visual Studio 2010 optymalizuje kod poprzez dostosowanie alokacji wyrównania danych z 64 bajtów do 16 bajtów. W związku z tym problem pamięci występuje dla obiektów, które przekracza 64 bajtów.
Rozwiązanie
Informacje o poprawce
Obsługiwana poprawka jest udostępniana przez firmę Microsoft. Jednak ta poprawka jest przeznaczona tylko do usunięcia problemu opisanego w tym artykule. Tylko w systemach, których dotyczy ten problem, należy zastosować tę poprawkę. Ta poprawka może być wciąż w fazie testowania. Jeśli dany system nie jest poważnie narażony na ten problem, firma Microsoft zaleca, aby poczekać na następną aktualizację oprogramowania zawierającą tę poprawkę. Aby pobrać tę poprawkę z galerii kodów MSDN, odwiedź następujące witryny firmy Microsoft:
http://code.msdn.microsoft.com/KB2280741Uwaga Galerii kodów MSDN zawiera listę języków, dla których dostępna jest poprawka. Jeśli na liście język nie jest widoczny, to dlatego stronie resource galerię kodu nie jest dostępna dla danego języka. Uwaga Jeśli wystąpią dodatkowe błędy lub konieczność rozwiązania problemu, być może trzeba będzie utworzyć osobne zlecenie usługi. Zwykłe koszty obsługi będą zastosowane do dodatkowych pytań i problemów, których nie można rozwiązać przy użyciu określonej poprawki. Aby uzyskać pełną listę numerów telefonów działu obsługi klienta firmy Microsoft lub utworzyć osobne zlecenie usługi odwiedź następujące witryny firmy Microsoft:
http://support.microsoft.com/contactus/?ws=supportMożna również pobrać tę poprawkę, odwiedź następujące witryny firmy Microsoft:
https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=31433
Wymagania wstępne
Aby zastosować tę poprawkę, musi mieć zainstalowany program Visual Studio 2010.
Wymagania dotyczące ponownego uruchomienia
Nie trzeba ponownie uruchomić komputer po zastosowaniu tej poprawki.
Informacje dotyczące zastępowania poprawek
Ta poprawka nie zastępuje żadnych innych poprawek.
Informacje dotyczące pliku
Wersja anglojęzyczna tej poprawki ma atrybuty plików (lub nowsze) wymienione w poniższej tabeli. Daty i godziny odpowiadające tym plikom zostały podane w formacie uniwersalnego czasu koordynowanego (UTC, Coordinated Universal Time). Po wyświetleniu informacji o pliku są konwertowane na czas lokalny. Aby zobaczyć różnicę między czasem UTC i czasem lokalnym, należy użyć z karty Strefa czasowa w aplecie Data i godzina w Panelu sterowania.
Nazwa pliku |
Wersja pliku |
Rozmiar pliku |
Data |
Godzina |
Platforma |
---|---|---|---|---|---|
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 |
Obejście
Aby obejść ten problem, nie należy używać z opcją kompilatora/O2 podczas tworzenia projektu.
Stan
Firma Microsoft potwierdziła, że jest to problem występujący w produktach firmy Microsoft wymienionych w sekcji „Dotyczy”.