功能发生的地方:
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来运行它。