증상
다음 시나리오를 고려하십시오.
-
Microsoft Visual Studio 2008 서비스 팩 1 (SP1)에 있는 클래스 또는 구조체에서 바이트를 로드 하는 응용 프로그램 만들기
-
/O2 최적화 옵션 또는 /Ox 최적화 옵션 설정.
-
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 서비스 팩 1 있어야 합니다.
다시 시작 요구 사항
이 핫픽스를 적용 한 후 컴퓨터를 다시 시작할 필요가 없습니다.
핫픽스 대체 정보
이 핫픽스는 다른 핫픽스를 대체하지 않습니다.
파일 정보
이 핫픽스의 영어 버전은 다음 표에 열거된 파일 특성 (또는 그 이후의 파일 특성)을 가지고 있습니다. 이러한 파일의 시간과 날짜는 협정 세계시(UTC)로 나열되었습니다. 파일 정보를 볼 때는 로컬 시간으로 변환됩니다. UTC와 로컬 시간의 시차는 제어판의 날짜 및 시간 항목에서 표준 시간대 탭을 사용하여 찾을 수 있습니다.
파일 이름 |
파일 버전 |
파일 크기 |
날짜 |
시간 |
플랫폼 |
---|---|---|---|---|---|
C2.dll |
15.0.30729입니다. 4082 |
2,283,320 |
2009 년 3 월 19 일 |
05:13 |
x86 |
C2.dll |
15.0.30729.4082 |
2,36 1,656 |
2009 년 3 월 19 일 |
05:13 |
x86 |
C2.dll |
15.0.30729.4082 |
3,01 7,528 |
2009 년 3 월 19 일 |
05:13 |
x64 |
Link.exe |
9.0.30729.4082 |
1, 0 54,520 |
2009 년 3 월 19 일 |
05:13 |
x64 |
Link.exe |
9.0.30729.4082 |
799, 032 |
19-Mar-2009 |
05:13 |
x86 |
해결 방법
이 문제를 해결 하려면 구조 또는 클래스의 가장 작은 여러 8 바이트 크기를 확장 하는 데 하나 이상의 더미 "서명 되지 않은 char" 구성원을 추가 합니다. 예를 들어, 14 바이트 16 바이트 수를 확장 합니다.
상태
Microsoft는 이 문제가 '적용 대상' 섹션에 나열된 Microsoft 제품의 문제임을 확인했습니다.
자세한 내용
소프트웨어 업데이트 용어에 대한 자세한 내용을 보려면, 다음 문서 번호를 클릭하여 Microsoft 기술 자료의 문서를 확인하십시오.
Microsoft 소프트웨어 업데이트를 설명 하는 데 사용 되는 표준 용어에 대 한 824684 설명
이 문제를 재현하는 단계
-
Test.cpp 라는 Visual Studio 2008 s p 1에서 다음 코드를 사용 하 여 응용 프로그램을 만듭니다.
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;
} -
다음 명령을 사용 하 여 응용 프로그램을 컴파일하십시오.
cl test.cpp /O2 /MD
예상된 된 결과 4입니다. 그러나 실제 결과 0입니다.