今天遇到一个很奇怪的问题,自己写的一段代码已经测试过好多次了,一直也在用着它觉得这段代码已经是很稳定了。但是今天跟新了一下库结果这段代码变成了一个必死的代码,真的有点不相信自己的眼睛,但是死机已经摆在了眼前了没有办法还是得把这bug给找出来、、、、、、找来找去多感觉没有问题,哎、、、、、、最后终于发现原来是一个变量由于换了库初始值变量,导致给一个指针赋值时没有赋到使得指针指飞了。经过这次总结了一下几点:
1、switch...case...default语句结构中如果default中没有事可做那么就加个断言
2、if...else if如果你的思想是这两种情况肯定有一种情况存在的话那么你应该多加一个else
来避免自己今天遇到的情况else里可以加个断言
if(pMonitorGuiFrame->gSysMod.gMonitorConfig.recSweepSpeed == 25)
{
ItemDbCaption[3].pStrRightCaption = pMonitorGuiFrame->GetLangStr(IDS_DLG_SPEED_250);
}
else if(pMonitorGuiFrame->gSysMod.gMonitorConfig.recSweepSpeed == 50)
{
ItemDbCaption[3].pStrRightCaption = pMonitorGuiFrame->GetLangStr(IDS_DLG_SPEED_500);
}
else //避免指针指飞
{
assert(FALSE);
}
switch(pMonitorGuiFrame->gSysMod.gMonitorConfig.recRTMode)
{
case 8:
ItemDbCaption[4].pStrRightCaption = pMonitorGuiFrame->GetLangStr(IDS_COM_TIME_8S);
break;
case 16:
ItemDbCaption[4].pStrRightCaption = pMonitorGuiFrame->GetLangStr(IDS_COM_TIME_16S);
break;
case 32:
ItemDbCaption[4].pStrRightCaption = pMonitorGuiFrame->GetLangStr(IDS_COM_TIME_32S);
break;
case 120:
ItemDbCaption[4].pStrRightCaption = pMonitorGuiFrame->GetLangStr(IDS_COM_TIME_CONTINUAL);
break;
default:
assert(FALSE);
break;
}
在尽可能多的地方加出错处理