0xC0000005:突然出现访问冲突

时间:2013-12-13 20:35:25

标签: c++ mfc

经过一段时间后,我的服务突然崩溃了。我用VS 2012对它进行了分析,它说它是一种访问违规行为。我实际上无法想象这一点。

功能发生的地方:

void CTItem::WrapPacketClient(CPacket * pPacket, DWORD dwCharID, BYTE bAddItemID, WORD 

wUseTime, BYTE bCashItem)

{
    BYTE bRegGuild = FALSE;

if( m_dwExtValue[IEV_GUILD] &&
    m_dwExtValue[IEV_GUILD] == dwCharID)
    bRegGuild = TRUE;

if(bAddItemID)
    (*pPacket) << m_bItemID;

(*pPacket)
    << m_wItemID
    << m_bLevel
    << m_bCount
    << m_dwDuraMax
    << m_dwDuraCur
    << m_pTITEM->m_bRefineMax
    << m_bRefineCur
    << m_bGLevel;

if(bCashItem)
    (*pPacket) << wUseTime;
else
    (*pPacket) << m_dEndTime;

(*pPacket)
    << m_bGradeEffect
    << BYTE(m_dwExtValue[IEV_ELD])
    << BYTE(m_dwExtValue[IEV_WRAP])
    << WORD(m_dwExtValue[IEV_COLOR])
    << bRegGuild
    << BYTE(m_mapTMAGIC.size());

MAPTMAGIC::iterator itTMAGIC;
for( itTMAGIC = m_mapTMAGIC.begin(); itTMAGIC != m_mapTMAGIC.end(); itTMAGIC++)
{
    (*pPacket)
        << (*itTMAGIC).first
        << GetMagicValue((*itTMAGIC).second);
}
}

VS 12表示访问冲突发生在此处:m_mapTMAGIC.begin()

MAPTMAGIC是std :: map(typedef map< BYTE, LPTMAGIC> MAPTMAGIC, *LPMAPTMAGIC;)的自定义类。 m_mapTMAGIC也是其中的一员。

GetMagicValue函数:

WORD CTItem::GetMagicValue( LPTMAGIC pTMAGIC)
{
    LPTITEMMAGIC pMagic = pTMAGIC->m_pMagic;

    FLOAT fRevision = FLOAT(pMagic->m_bRvType ? m_pTITEM->m_fRevision[pMagic->m_bRvType-1] : 1.0);
    WORD wValue = WORD(fRevision * pTMAGIC->m_wValue * pMagic->m_wMaxValue) / 100;
    return max(wValue, 1);
}

此函数用于计算(* itTMAGIC).second的值。 (* itTMAGIC).first选择值的ID(实际是哪种类型)。

希望你能知道它崩溃的原因。

此应用程序是MFC应用程序。它是用VS 2003编写的。我使用Windows Server 2008 x64来运行它。

0 个答案:

没有答案