다음을 통해 공유


C28182

경고 C28182: NULL 포인터를 역참조 합니다.

자세한 내용은: <pointer1> 동일한 NULL 값이 포함 된 <pointer2> 하지 <note>

코드 분석 도구 포인터는 NULL이 될 수 있는지 확인 하는 경우이 경고를 보고 합니다.코드 분석 도구 추적에서 앞의 오류가 발생할 수 있습니다 위치 하는 확인 되지 않은 인스턴스가 있는 경우 모든 인스턴스를 처리 하는 코드를 변경할 수 있도록 줄 번호 첫 번째 인스턴스를 경고 메시지에 추가 됩니다.

<pointer2> 잠재적으로 NULL 일 수를 확인 합니다.<pointer1> 와 같은 값을 포함 pointer2 및 역참조 되 고 있습니다.이러한 포인터 코드에서 매우 다양 한 위치에 있을 수 있습니다 때문에이 경고가 코드 분석 도구를 보고 이유를 파악할 수 있도록 모두 보고 됩니다.

상황의 확인 되지 않은 이전 인스턴스 경우 다음 있는 경우 <note> 이 텍스트에 의해 대체 됩니다: "줄을 참조 하십시오 <number> 이 발생할 수 있는 위치에서 이전 위치에 대 한."

예제

다음 예제 코드에서는이 경고 메시지를 생성할 수 있는 코드 분석 도구가 될 수 있습니다.이 예에서 코드 분석 도구를 결정 pNodeFree 에 NULL이 있는 if 문과 본문에 코드 경로 if 수행 되지 않습니다.그러나 때문에 nBlockSize 0 잠재적으로, 본문입니다의 for 문이 실행 되지 않습니다 및 pNodeFree 왼쪽을 수정 하지 않고.pNodeFree할당 된 pNode, 및 pNode NULL 역참조 발생할 수 때 사용 됩니다.

typedef struct xlist {
    struct xlist *pNext;
    struct xlist *pPrev;
} list;

list *pNodeFree;
list *masterList;
int nBlockSize;

void fun()
{
    if (pNodeFree == 0)
    {
        list *pNode = masterList;

        for (int i = nBlockSize-1; i >= 0; i--, pNode--)
        {
            pNode->pNext = pNodeFree;
            pNodeFree = pNode;
        }
    }

    list* pNode = pNodeFree;
    pNode->pPrev = 0;
}

코드 분석 도구에서 다음 경고를 보고합니다.

:\sample\testfile.cpp(24) : warning C28182: Dereferencing NULL pointer. 'pNode' contains the same NULL value as 'pNodeFree' did.: Lines: 12, 14, 16, 23, 24

앞의 예제를 수정 하는 방법을입니다 확인할 수 pNode 0 NULL 역참조를 averted는 참조를 해제 하기 전에 대 한.이 수정 다음 코드를 보여 줍니다.

typedef struct xlist {
    struct xlist *pNext;
    struct xlist *pPrev;
} list;

list *pNodeFree;
list *masterList;
int nBlockSize;

void fun()
{
    if (pNodeFree == 0)
    {
        list *pNode = masterList;

        for (int i = nBlockSize-1; i >= 0; i--, pNode--)
        {
            pNode->pNext = pNodeFree;
            pNodeFree = pNode;
        }
    }

    list* pNode = pNodeFree;
    if(pNode != 0)
      pNode->pPrev = 0;
}