warning C6011: NULL 포인터 '이름'을(를) 역참조하고 있습니다.
VS2008 의 "코드 분석" 을 하면 볼 수 있는 경고 메시지 이다.
※ 메시지가 발생한 코드
INT nIndex = 0;
INT nItemCount = m_EvtFindList.GetCount();
POSITION pos = m_EvtFindList.GetHeadPosition();
CEvtFind *pEvtFind = NULL;
for (nIndex = 0; nIndex < nItemCount; nIndex++)
{
pEvtFind = reinterpret_cast<CEvtFind *>(m_EvtFindList.GetNext(pos));
if (0 == _rsLogName.CompareNoCase(pEvtFind->GetLogName()))
break;
if (nIndex == nItemCount - 1)
return _T("");
}
return pEvtFind->GetRangeName();
코드를 보면 pEvtFind 변수가 NULL로 초기화 되어 있다.
for 반복문에서 pEvtFind 값이 설정이 되고 return 문에서 pEvtFind 를 사용하고 있다.
코드를 작성할 때는 당연히 pEvtFind 값이 for 문을 나오면 NULL 포인터가 아님을 확신하고 작성하였다.
하지만 컴파일러는 for() 문에서 바로 빠져 나오면 return 문에서 NULL 값을 가진 pEvtFind 사용할 수 있음을 경고 하는
것이다.
경고를 없애기 위해 다음과 같이 코딩 해 주었다.
INT nIndex = 0;
INT nItemCount = m_EvtFindList.GetCount();
POSITION pos = m_EvtFindList.GetHeadPosition();
CEvtFind *pEvtFind = NULL;
for (nIndex = 0; nIndex < nItemCount; nIndex++)
{
pEvtFind = reinterpret_cast<CEvtFind *>(m_EvtFindList.GetNext(pos));
if (0 == _rsLogName.CompareNoCase(pEvtFind->GetLogName()))
break;
if (nIndex == nItemCount - 1)
return _T("");
}
if (NULL == pEvtFind)
return _T("");
return pEvtFind->GetRangeName();
cf) http://msdn.microsoft.com/ko-kr/library/2ayc37ac.aspx
VS2008 의 "코드 분석" 을 하면 볼 수 있는 경고 메시지 이다.
※ 메시지가 발생한 코드
INT nIndex = 0;
INT nItemCount = m_EvtFindList.GetCount();
POSITION pos = m_EvtFindList.GetHeadPosition();
CEvtFind *pEvtFind = NULL;
for (nIndex = 0; nIndex < nItemCount; nIndex++)
{
pEvtFind = reinterpret_cast<CEvtFind *>(m_EvtFindList.GetNext(pos));
if (0 == _rsLogName.CompareNoCase(pEvtFind->GetLogName()))
break;
if (nIndex == nItemCount - 1)
return _T("");
}
return pEvtFind->GetRangeName();
코드를 보면 pEvtFind 변수가 NULL로 초기화 되어 있다.
for 반복문에서 pEvtFind 값이 설정이 되고 return 문에서 pEvtFind 를 사용하고 있다.
코드를 작성할 때는 당연히 pEvtFind 값이 for 문을 나오면 NULL 포인터가 아님을 확신하고 작성하였다.
하지만 컴파일러는 for() 문에서 바로 빠져 나오면 return 문에서 NULL 값을 가진 pEvtFind 사용할 수 있음을 경고 하는
것이다.
경고를 없애기 위해 다음과 같이 코딩 해 주었다.
INT nIndex = 0;
INT nItemCount = m_EvtFindList.GetCount();
POSITION pos = m_EvtFindList.GetHeadPosition();
CEvtFind *pEvtFind = NULL;
for (nIndex = 0; nIndex < nItemCount; nIndex++)
{
pEvtFind = reinterpret_cast<CEvtFind *>(m_EvtFindList.GetNext(pos));
if (0 == _rsLogName.CompareNoCase(pEvtFind->GetLogName()))
break;
if (nIndex == nItemCount - 1)
return _T("");
}
if (NULL == pEvtFind)
return _T("");
return pEvtFind->GetRangeName();
cf) http://msdn.microsoft.com/ko-kr/library/2ayc37ac.aspx