잘못된 주소 제공 :아래에 정의 된 바와 같이 나는 구조 내부에 노조를 선언 할 필요가 있었다
struct MyStruct
{
int m_DataType;
DWORD m_DataLen;
union theData
{
char m_Buff [_MAX_PATH];
struct MyData m_myData;
} m_Data;
};
는 처음에, 나는 다음과 같이 노동 조합의 데이터에 액세스 시도를 (I 전에 하여 m_Data 선언을) 추가 :
MyStruct m_myStruct;
char* pBuff = m_myStruct.theData::m_Buff;
이 pBuff에 반환하지만 나는 내가 m_Buff 버퍼에 기록 된 생각하면 m_DataType & m_DataLength 회원을 덮어 나를 인한 MYSTRUCT 구조의 시작 부분에 대한 포인터를 컴파일합니다.
Visual Studio 2008을 사용하고 있습니다.이 예기치 않은 동작을 설명 할 수 있습니까? 감사.
네, 기본적으로 제 질문입니다. 컴파일 된 이유 또는 왜 잘못 된 이유인지 이해하지 못합니다. 지금 m_myStruct.m_Data.m_Buff 사용하고 있지만 이전 액세스 메서드에 대한 컴파일러의 추론을 이해하기를 원했습니다. – AlanKley
컴파일 중이십니까? 정말? 당신이 쓴 것을 합법적으로 해석 할 수 없기 때문에 다시 검사 할 수 있습니까? 그리고 컴파일러가 '버그'를 생각할 때 손가락을 가리킬 것입니다. –
및 AlanKley : 저는 여러 버전의 MSVC++로 Alan의 예를 컴파일했으며 현재 VC2010 릴리스를 통해 오류없이 컴파일됩니다. 표현의 결과는 Alan이 묘사 한 것과 똑같습니다. 시도한 다른 모든 컴파일러에 적절한 오류 메시지가 표시됩니다. –