Gejala
Pertimbangkan skenario berikut ini.
-
Anda membuat aplikasi yang memuat byte dari struktur atau kelas di Microsoft Visual Studio 2008 Paket Layanan 1 (SP1).
-
Anda mengaktifkan opsi optimasi /Ox atau opsi optimasi /O2 .
-
Anda mengkompilasi aplikasi dengan menggunakan konfigurasi peluncuran untuk x64 platform.
Dalam skenario ini, offset yang dibuat untuk mengakses anggota struktur atau anggota kelas tidak benar.
Masalah ini terjadi hanya ketika ukuran struktur dan offset atau ukuran kelas dan offset sama dengan salah satu pasang berikut ini:
-
(14,13)
-
(15,13)
-
(22,21)
-
(23,21)
-
(30,29)
-
(31,29)
Pemecahan masalah
Informasi Hotfix
Sekarang tersedia hotfix yang didukung dari Microsoft. Namun, ini ditujukan untuk memperbaiki masalah yang dijelaskan di artikel ini. Terapkan hanya ke sistem yang mengalami masalah khusus ini. Perbaikan terbaru ini dapat menerima pengujian tambahan. Oleh karena itu, jika Anda tidak terlalu dipengaruhi oleh masalah ini, kami sarankan Anda menunggu paket layanan Visual Studio 2008 berikutnya yang berisi perbaikan terbaru ini.
Untuk segera menyelesaikan masalah ini, hubungi layanan dukungan pelanggan Microsoft untuk mendapatkan hotfix. Untuk daftar lengkap nomor telepon layanan dukungan pelanggan Microsoft dan informasi mengenai biaya dukungan, kunjungi situs Web Microsoft berikut ini:
http://support.microsoft.com/contactus/?ws=supportCatatan Dalam kasus tertentu, biaya yang biasanya diadakan untuk panggilan dukungan mungkin dibatalkan apabila profesional dukungan Microsoft menentukan bahwa pembaruan khusus akan memecahkan masalah Anda. Biaya dukungan biasa akan berlaku untuk pertanyaan dan masalah yang tidak termasuk pada pembaruan tertentu yang dimaksud dukungan tambahan.
Prasyarat
Anda harus memiliki Visual Studio 2008 Paket Layanan 1 diinstal untuk menerapkan hotfix ini.
Persyaratan menghidupkan ulang
Anda tidak harus menghidupkan ulang komputer setelah menerapkan hotfix ini.
Informasi penggantian hotfix
Hotfix ini tidak menggantikan hotfix lainnya.
Informasi file
Versi bahasa Inggris dari hotfix ini memiliki atribut berkas (atau atribut berkas yang lebih baru) yang tercantum dalam tabel berikut. Tanggal dan waktu untuk berkas-berkas tersebut dicantumkan dalam Waktu Universal Terkoordinasi (UTC). Ketika Anda melihat informasi berkas, akan diubah ke waktu lokal. Untuk menemukan perbedaan antara waktu UTC dan waktu lokal, gunakan tab Zona Waktu di item Tanggal dan Waktu di Panel Kontrol.
Nama file |
Versi file |
Ukuran file |
Tanggal |
Waktu |
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 |
Pemecahan masalah
Untuk mengatasi masalah ini, tambahkan satu atau lebih anggota sembarang "tidak ditandatangani char" untuk memperbesar ukuran struktur atau kelas multi terkecil delapan byte. Sebagai contoh, memperluas 14 byte untuk 16 byte.
Status
Microsoft telah memastikan bahwa ini merupakan masalah di dalam produk Microsoft sebagaimana tercantum di bagian "Berlaku untuk".
Informasi lebih lanjut
Untuk informasi selengkapnya tentang peristilahan pemutakhiran perangkat lunak, klik nomor artikel berikut ini untuk melihat artikel di Pangkalan Pengetahuan Microsoft:
824684 Deskripsi tentang terminologi standar yang digunakan untuk menjelaskan pembaruan perangkat lunak Microsoft
Langkah-langkah untuk mereproduksi masalah
-
Membuat aplikasi yang bernama Test.cpp dengan menggunakan kode berikut dalam 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;
} -
Kompilasi aplikasi dengan menggunakan perintah berikut ini:
Cl test.cpp /O2 /MD
Hasil yang diharapkan adalah 4. Namun, hasil yang sebenarnya adalah 0.