VS2010环境下用cocos2d-x写的程序出了0xc0000005
出错段代码如下:
void CUILevels::SetupMaxLevScore()
{
for(int i=0; i<m_maxLevImage.size(); i++)
{
CCLog("%d",m_maxLevImage.size());
int totalNums = m_saveData.m_levData[i].minDataList.size();
int errorNums = 0;
for(int iMinH = 0; iMinH<totalNums; iMinH++)
{
if( m_saveData.m_levData[i].minDataList[iMinH].hScore < 60&&m_saveData.m_levData[i].minDataList[iMinH].hScore!=0){
errorNums++;
}
}
char xxx[12];
sprintf(xxx,"%d/%d", errorNums,totalNums);
CCLog(xxx,"%d/%d", errorNums,totalNums);
CCLabelTTF *pFont = (CCLabelTTF*)m_maxLevImage[i]->getChildByTag(2);
//pFont->setString(xxx);
}
}
注释了最后一句话以后就能运行,不过到里面选择关卡的时候也崩 Visual?Studio?2010 Cocos2d-x
[解决办法]
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。
判断是否越界访问,可以在数组的最后一个元素之后对应的地址处设置数据读写断点。如果该地址对应其它变量干扰判断,可将数组多声明一个元素,并设置数据读写断点在该多出元素对应的地址上。
[解决办法]
sprintf(xxx,"%d/%d", errorNums,totalNums);
CCLog(xxx,"%d/%d", errorNums,totalNums);
CCLabelTTF *pFont = (CCLabelTTF*)m_maxLevImage[i]->getChildByTag(2);
if(0 == pFont)
{
// error report!
}
else
{
pFont->setString(xxx);
}