الأعراض
اطلع على السيناريو التالي.
-
إنشاء تطبيق يقوم بتحميل بايت من بنية أو فئة في Microsoft Visual Studio 2008 Service Pack 1 (SP1).
-
تشغيل الخيار الأمثل /Ox أو تحسين /O2 .
-
ترجمة التطبيق باستخدام تكوين إصدار x64 النظام الأساسي.
في هذا السيناريو، الإزاحة التي يتم إنشاؤها من الوصول إلى عضو بنية أو عضو الفئة غير صحيح.
تحدث هذه المشكلة فقط عند حجم البنية والإزاحة أو حجم فئة والإزاحة تساوي أحد أزواج التالية:
-
(14,13)
-
(15,13)
-
(22,21)
-
(23,21)
-
(30,29)
-
(31,29)
الحل
معلومات الإصلاح العاجل
الآن يتوفر إصلاح عاجل معتمد من Microsoft. ومع ذلك، الغرض منه هو حل المشكلة الموضحة في هذه المقالة فقط. تطبيقها فقط على الأنظمة التي تواجه هذه المشكلة بالتحديد. قد يتم إجراء اختبارات إضافية على هذا الإصلاح العاجل. لذلك، إذا لم يكن تأثير المشكلة كبيرا، نوصي بالانتظار حتى الإصدار التالي حزمة الخدمة Visual Studio 2008 الذي يحتوي على هذا الإصلاح العاجل.
لحل هذه المشكلة فورا، اتصل بخدمات دعم العملاء في Microsoft للحصول على الإصلاح العاجل. للحصول على قائمة كاملة من أرقام هواتف خدمات دعم العملاء في Microsoft وعلى معلومات حول تكاليف الدعم، الرجاء زيارة موقع Microsoft التالي على الويب:
http://support.microsoft.com/contactus/?ws=supportملاحظة: في بعض الحالات، قد يتم إلغاء المصروفات التي تحتسب عادة على مكالمات الدعم إذا قرر أخصائي الدعم لدى Microsoft أن تحديثًا معيناً سوف يعمل على حل المشكلة. سيتم اضافة تكاليف الدعم المعتادة على أسئلة الدعم الإضافية والمشاكل التي لا يأهل على حلها للتحديث المطلوب.
المتطلبات الأساسية
يجب أن يكون لديك Visual Studio 2008 Service Pack 1 مثبتة لتطبيق هذا الإصلاح العاجل.
متطلبات إعادة التشغيل
ليس من الضروري إعادة تشغيل جهاز الكمبيوتر بعد تطبيق هذا الإصلاح العاجل.
معلومات استبدال الإصلاح العاجل
لا يحل هذا الإصلاح العاجل محل أية إصلاحات عاجلة أخرى.
معلومات الملف
يحتوي إصدار اللغة الإنجليزية من هذا الإصلاح العاجل على سمات الملف (أو سمات الملف الأحدث) المسرودة في الجدول التالي. يتم سرد التواريخ والأوقات الخاصة بهذه الملفات بالتوقيت العالمي المتفق عليه (UTC). عند عرض معلومات الملف، يتم تحويلها إلى التوقيت المحلي. لمعرفة الفرق بين التوقيت العالمي المتفق عليه والتوقيت المحلي، استخدم علامة التبويب المنطقة الزمنية في عنصر التاريخ والوقت في "لوحة التحكم".
اسم الملف |
إصدار الملف |
حجم الملف |
التاريخ |
الوقت |
النظام الأساسي |
---|---|---|---|---|---|
C2.dll |
15.0.30729. 4082 |
2,283,320 |
19/03/2009 |
05:13 |
x86 |
C2.dll |
15.0.30729.4082 |
2,36 1656 |
19/03/2009 |
05:13 |
x86 |
C2.dll |
15.0.30729.4082 |
3,01 7,528 |
19/03/2009 |
05:13 |
x64 |
Link.exe |
9.0.30729.4082 |
54,520 1, 0 |
19/03/2009 |
05:13 |
x64 |
Link.exe |
9.0.30729.4082 |
799، 032 |
19-Mar-2009 |
05:13 |
x86 |
الحل البديل
للتغلب على هذه المشكلة، أضف أعضاء وهمية "حرف غير الموقعة" واحد أو أكثر لتوسيع حجم بنية أو فئة إلى مضاعف أصغر من 8 بايت. على سبيل المثال، توسيع وحدات البايت 14 إلى 16 بايت.
الحالة
أقرت Microsoft أن هذه مشكلة في منتجات Microsoft المسردة في قسم "ينطبق على".
مزيد من المعلومات
لمزيد من المعلومات حول مصطلحات تحديث البرامج، انقر فوق رقم المقال التالي لعرضه في "قاعدة معارف Microsoft":
824684 وصف للمصطلحات القياسية المستخدمة في وصف تحديثات برامج Microsoft
خطوات إعادة إنشاء المشكلة
-
إنشاء تطبيق يسمى Test.cpp باستخدام التعليمات البرمجية التالية في 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;
} -
ترجمة التطبيق باستخدام الأمر التالي:
مس test.cpp/O2/MD
والنتيجة المتوقعة هي 4. غير أن النتيجة الفعلية هي 0.