Belirtiler
Aşağıdaki senaryoyu ele alın.
-
Bir yapı ya da Microsoft Visual Studio 2008 Service Pack 1 (SP1) bir sınıfta bir bayt yükleyen bir uygulama oluşturun.
-
Siz /Ox en iyileştirme seçeneğini veya /O2 en iyileştirme seçeneğini açın.
-
Yayın yapılandırma için x64 kullanarak uygulamayı derleyin platformu.
Bu senaryoda, yapısı üyesi veya sınıf üyesi erişmek için oluşturulan mahsup yanlıştır.
Bu sorun, yalnızca zaman yapı boyutu ve uzaklık veya sınıf boyutu ve uzaklık aşağıdaki çiftleri biri eşit oluşur:
-
(14,13)
-
(15,13)
-
(22,21)
-
(23,21)
-
(30,29)
-
(31,29)
Çözüm
Düzeltme bilgileri
Artık Microsoft tarafından desteklenen bir düzeltme sağlanmaktadır. Ancak bunun yalnızca bu makalede anlatılan sorunu düzeltmesi amaçlanmıştır. Yalnızca bu özel sorunla karşılaşmış olan sistemlere uygulayın. Bu düzeltme ek sınama uygulanabilir. Bu nedenle, bu sorundan ciddi bir şekilde etkilemiyorsa, bu düzeltmeyi içeren bir sonraki Visual Studio 2008 hizmet paketini beklemenizi öneririz.
Bu sorunu hemen düzeltmek için düzeltmeyi edinmek üzere Microsoft Müşteri Destek Hizmetleri'ne başvurun. Microsoft Müşteri Destek Hizmetleri telefon numaralarının ve destek ücretleriyle ilgili bilgi tam listesi için aşağıdaki Microsoft Web sitesini ziyaret edin:
http://support.microsoft.com/contactus/?ws=supportNot: Özel durumlarda, Microsoft Destek Uzmanı özel bir güncelleştirmenin sorununuzu çözeceğini belirlerse, destek aramaları için normalde uygulanan ücretler iptal edilebilir. Ek destek sorularına ve söz konusu güncelleştirme için geçerli olmayan sorunlara normal destek ücretleri uygulanır.
Önkoşullar
Visual Studio 2008 Service Pack bu düzeltmeyi uygulamak için 1 olmalıdır.
Yeniden başlatma gereksinimi
Bu düzeltmeyi uyguladıktan sonra bilgisayarı yeniden başlatmanız gerekmez.
Düzeltme değiştirme bilgileri
Bu düzeltme eki, başka düzeltmelerin yerini almaz.
Dosya bilgileri
Bu düzeltmenin İngilizce sürümü, aşağıdaki tabloda listelenen dosya özniteliklerine (veya daha yeni dosya özniteliklerine) sahiptir. Bu dosyaların tarihleri ve saatleri Koordinatlı Evrensel Saat'te (UTC) listelenmiştir. Dosya bilgilerini görüntülediğinizde koordinatlı evrensel saat yerel saate dönüştürülür. UTC ve yerel saat arasındaki farkı bulmak için Denetim Masası'ndaki Tarih ve Saat öğesinde Saat Dilimi sekmesini kullanın.
Dosya adı |
Dosya sürümü |
Dosya boyutu |
Tarih |
Saat |
Platform |
---|---|---|---|---|---|
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 |
Geçici çözüm
Bu soruna geçici bir çözüm için yapı veya sınıfın en küçük katına sekiz bayt boyutunu genişletmek için bir veya daha fazla kukla "İmzasız char" üyeler ekleyin. Örneğin, 14 16 bayt bayt genişletir.
Durum
Microsoft bu sorunun "Aşağıdakilere Uygulanır" bölümünde listelenen Microsoft ürünlerinde bulunduğunu onaylamıştır.
Daha fazla bilgi
Yazılım güncelleştirme terminolojisi hakkında daha fazla bilgi için Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasına tıklayın:
824684 Microsoft yazılım güncelleştirmelerini açıklamak için kullanılan standart terminolojinin açıklaması
Sorunu yeniden oluşturma adımları
-
Visual Studio 2008 SP1'de aşağıdaki kodu kullanarak Test.cpp adlı bir uygulama oluşturun:
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;
} -
Aşağıdaki komutu kullanarak uygulamayı derleyin:
cl test.cpp /O2 /MD
Beklenen sonuç 4 olacaktır. Ancak, gerçek sonuç 0'dır.