Khắc phục: Bù được tạo ra để truy cập vào cấu trúc viên hoặc thành viên lớp không chính xác khi bạn biên dịch ứng dụng bằng cách sử dụng tuỳ chọn /Ox hoặc tuỳ chọn /O2 trong Visual Studio 2008 SP1

Triệu chứng

Xem xét kịch bản sau đây.

  • Bạn tạo một ứng dụng tải một byte từ một hoặc một lớp trong Microsoft Visual Studio 2008 gói dịch vụ 1 (SP1).

  • Bạn bật tuỳ chọn tối ưu hóa /Ox hoặc /O2 tối ưu hóa tùy chọn.

  • Bạn biên dịch ứng dụng bằng cách sử dụng cấu hình phát hành cho các x64 nền tảng.

Trong trường hợp này, bù được tạo ra để truy cập vào cấu trúc viên hoặc thành viên lớp không chính xác.

Sự cố này xảy ra chỉ khi kích thước cấu trúc và phần bù hoặc lớp và lượng bù thời bằng một trong các cặp sau:

  • (14,13)

  • (15,13)

  • (22,21)

  • (23,21)

  • (30,29)

  • (31,29)

Giải pháp

Thông tin về cập nhật nóng

Microsoft hiện đã cung cấp bản cập nhật nóng được hỗ trợ. Tuy nhiên, nó là nhằm khắc phục chỉ sự cố được mô tả trong bài viết này. Áp dụng cho các hệ thống đang gặp sự cố cụ thể này. Hotfix này có thể được kiểm tra thêm. Vì vậy, nếu bạn không bị ảnh hưởng bởi sự cố này, chúng tôi khuyến nghị bạn đợi cho tới Visual Studio 2008 gói dịch vụ có chứa hotfix này.

Để giải quyết vấn đề này ngay lập tức, hãy liên hệ với dịch vụ hỗ trợ khách hàng Microsoft để lấy hotfix. Để biết danh sách đầy đủ số điện thoại Dịch vụ hỗ trợ khách hàng của Microsoft và thông tin về chi phí hỗ trợ, ghé thăm Web site sau của Microsoft:

http://support.microsoft.com/contactus/?ws=supportLưu ý Trong trường hợp đặc biệt, chi phí thường phát sinh cho cuộc gọi hỗ trợ có thể bị hủy bỏ nếu chuyên viên hỗ trợ Microsoft xác định rằng một Cập Nhật cụ thể sẽ giải quyết vấn đề của bạn. Chi phí hỗ trợ thông thường sẽ áp dụng cho các vấn đề không phù hợp với bản Cập Nhật cụ thể trong câu hỏi và câu hỏi hỗ trợ bổ sung.

Điều kiện tiên quyết

Bạn phải có Visual Studio 2008 Service Pack 1 cài đặt để áp dụng hotfix này.

Yêu cầu khởi động lại

Bạn không phải khởi động lại máy tính sau khi bạn áp dụng hotfix này.

Thông tin thay thế cập nhật nóng

Hotfix này không thay thế bất kỳ hotfix nào khác.

Thông tin về tệp

Phiên bản tiếng Anh của cập nhật nóng này có các thuộc tính tệp (hoặc thuộc tính tệp mới hơn) được liệt kê trong bảng sau. Ngày và giờ của các tệp này được liệt kê theo Giờ Quốc tế Phối hợp (UTC). Khi bạn xem thông tin về tệp, ngày và giờ được chuyển đổi thành giờ địa phương. Để tìm sự khác nhau giữa UTC và giờ địa phương, sử dụng tab Múi Giờ trong mục Ngày và Giờ trong Pa-nen điều khiển.

Tên tệp

Phiên bản tệp

Kích thước tệp

Ngày

Giờ

Nền tảng

C2.dll

15.0.30729. 4082

2,283,320

Ngày 19 tháng 3 năm 2009

05:13

x86

C2.dll

15.0.30729.4082

1.656 người 2,36

Ngày 19 tháng 3 năm 2009

05:13

x86

C2.dll

15.0.30729.4082

3,01 7,528

Ngày 19 tháng 3 năm 2009

05:13

x64

Link.exe

9.0.30729.4082

1,0 54,520

Ngày 19 tháng 3 năm 2009

05:13

x64

Link.exe

9.0.30729.4082

799, 032

19-Mar-2009

05:13

x86

Giải pháp

Để khắc phục sự cố này, thêm một hoặc nhiều thành viên giả "ký tự dấu" để mở rộng kích thước cấu trúc hoặc loại đa nhỏ 8 byte. Ví dụ, mở rộng byte 14 đến 16 byte.

Trạng thái

Microsoft đã xác nhận rằng đây là sự cố trong sản phẩm của Microsoft được liệt kê trong phần "Áp dụng cho".

Thông tin

Để biết thêm thông tin về thuật ngữ cập nhật phần mềm, hãy bấm vào số bài viết sau để xem bài viết trong Cơ sở Kiến thức Microsoft:

824684 mô tả thuật ngữ chuẩn được sử dụng để miêu tả các bản cập nhật phần mềm Microsoft

Các bước để tái tạo sự cố

  1. Tạo một ứng dụng có tên Test.cpp bằng cách sử dụng mã sau trong 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;
    }
  2. Biên dịch ứng dụng bằng cách sử dụng các lệnh sau:

    CL test.cpp /O2 /MD

Kết quả mong đợi là 4. Tuy nhiên, do thực tế là 0.

Bạn cần thêm trợ giúp?

Phát triển các kỹ năng của bạn
Khám phá nội dung đào tạo
Sở hữu tính năng mới đầu tiên
Tham gia Microsoft dùng nội bộ

Thông tin này có hữu ích không?

Cảm ơn phản hồi của bạn!

Cảm ơn bạn đã phản hồi! Để trợ giúp tốt hơn, có lẽ chúng tôi sẽ kết nối bạn với một trong những nhân viên hỗ trợ Office của chúng tôi.

×