경고 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;
}