영어로 읽기

다음을 통해 공유


경고 C6001

초기화되지 않은 메모리 '변수' 사용

설명

이 경고는 초기화되지 않은 지역 변수가 값이 할당되기 전에 사용될 때 보고됩니다. 이 사용으로 인해 예측할 수 없는 결과가 발생할 수 있습니다. 사용하기 전에 항상 변수를 초기화해야 합니다.

코드 분석 이름: USING_UNINIT_VAR

예시

다음 코드는 변수 i 가 true인 경우에만 b 초기화되므로 이 경고를 생성합니다.

int f( bool b )
{
   int i;
   if ( b )
   {
      i = 0;
   }
   return i; // i is uninitialized if b is false
}

이 경고를 수정하려면 다음 코드와 같이 변수를 초기화합니다.

int f( bool b )
{
   int i = -1;

   if ( b )
   {
      i = 0;
   }
   return i;
}

경험적 학습

다음 예제에서는 참조로 함수에 변수를 전달하면 컴파일러에서 변수가 초기화된다고 가정합니다.

void init( int& i );

int f( bool b )
{
   int i;

   init(i);

   if ( b )
   {
      i = 0;
   }
   return i; // i is assumed to be initialized because it's passed by reference to init()
}

이는 변수에 대한 포인터를 초기화 함수에 전달하는 패턴을 지원합니다.

이 추론은 많은 함수가 초기화된 데이터를 가리키는 포인터를 예상하기 때문에 가음성으로 이어질 수 있습니다. SAL 주석(예: _In__Out_)을 사용하여 함수의 동작을 설명합니다. 다음 예제에서는 인수가 초기화될 것으로 예상되는 함수를 호출하여 경고가 생성됩니다.

void use( _In_ int& i );

int f( bool b )
{
   int i;

   use(i); // uninitialized variable warning because of the _In_ annotation on use()

   if ( b )
   {
      i = 0;
   }
   return i;
}

참고 항목

컴파일러 경고(수준 1 및 수준 4) C4700