다음을 통해 공유


경고 C28183

인수는 하나의 값일 수 있으며 포인터에 있는 값의 복사본입니다.

이 경고는 이 값이 현재 컨텍스트에서 예상치 않은 값임을 나타냅니다. 이 경고는 일반적으로 값을 허용하지 않는 함수에 인수로 전달될 때 NULL 나타납니다. 이 값은 실제로 지정된 변수에서 발견되며, 인수는 해당 변수의 복사본입니다.

코드 분석 도구는 최종적으로 포인터가 NULL이거나 잘못된 값을 포함하는 것으로 결정할 수 있는 첫 번째 위치에서 이 경고를 보고합니다. 그러나 추적의 앞부분에서 오류가 실제로 발생할 수 있는 경우가 많습니다. 이 경우 코드 분석 도구는 일반적으로 경고가 적절한지 확인할 수 없는 위치에서 가능한 첫 번째 인스턴스의 줄 번호도 제공합니다. 이러한 경우 발생할 수 있는 이전 위치가 경고 메시지에 추가됩니다. 일반적으로 보고 지점 대신 해당 줄 번호 위치 또는 이전 위치에서 코드 변경을 수행해야 합니다.

예시

다음 예제에서 코드 분석 도구는 문에서 if NULL임을 확인하고 본문을 if 가져옵니다. 그런 다음 포인터가 t에 할당된 다음 역참조가 발생할 수 있는 방식으로 tNULL 사용됩니다.

#include <windows.h>

int fun2(char *s)
{
    char *t;
    if (s == NULL) {
       //... but s is unchanged
    }

    t = s;

    return lstrlenA(t);
}

이 코드 예제에서 코드 분석 도구는 다음과 같은 경고를 보고합니다.

d:\sample\testfile.cpp(38) : warning C28183: 't' could be '0', and is a copy of the value found in 's':  this does not adhere to the specification for the function 'lstrlenA'.: Lines: 31, 32, 36, 38