비주얼 스튜디오 통합 개발 환경에서 디버그 모드로 프로젝트 실행시에 동적으로 할당한 메모리의 초기값은 0xcd로 채워집니다. 디버깅 하다가 0xcdcdcdcd 라는 값이 보일 경우 동적 메모리로 할당하고 초기화를 안한 변수를 그냥 사용해서 문제가 생겼다는걸 이해해야 합니다. 아래는 테스트 코드 내용입니다.

 

struct Local
{
     int             a;
     char          b;
     char *        c;
     short *       d;
     int *           e;
     __int64 *     f;
 };


int _tmain(int argc, _TCHAR* argv[])
{
    Local * pLocal = new Local;
    return 0;
}

 

 

 

 

Hexadecimal Display 를 체크 하면 아래와 같이 모든 값이 0xcd로 채워져 있는 것을 볼 수 있습니다.

 

c, d, e, f 포인터 변수의 사이즈가 틀리지만 전부 0xcdcdcdcd 로서 4바이트인 이유는 32비트 프로그래밍에서는 어떤 형이라도 포인터 변수의 크기는 4바이트이기 때문입니다.

 

 

 

 

추가로 정적 변수는 어떤값으로 채워지는지 확인해 봤습니다.

 

struct Local
{
    int         a;
    char      b;
    char *    c;
    short *   d;
    int *       e;
    __int64 *  f;
};


int _tmain(int argc, _TCHAR* argv[])
{
    Local local;
    return 0;
}

 

내용을 보니 0xcc 로 채워져 있습니다.

 

 

 

 

local.c 와 같이 초기화 되지 않은 변수를 접근하면 아래와 같은 메시지 박스가 뜹니다.

 

 

 

 

 


Posted by great-artist
,