首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

小弟我被搞蒙了, 大家看看是咋回事

2013-10-11 
我被搞蒙了, 大家看看是怎么回事?下面是一段代码:void __fastcall TUser::BtnChgAllClick(TObject *Sender

我被搞蒙了, 大家看看是怎么回事?
下面是一段代码:
void __fastcall TUser::BtnChgAllClick(TObject *Sender)
{
int i=0,ms=0;
TDateTime lstChgto;
SetChgTo=new TSetChgTo(this);
if(SetChgTo->ShowModal()!=1)return;
if(Grid1DSet->SelectSQL->Text.Pos("where")>0)
{ShowMessage("  当前表中的用户并非全部用户,\n\n要进行计费请取消查找选项以显示全部用户!\n");
return;
}
Grid1DSet->DisableControls();
for(Grid1DSet->First();!Grid1DSet->Eof;Grid1DSet->Next(),i++)
{ lstChgto=Grid1DSet->FieldByName("Chgto")->AsDateTime;
  if(Grid1DSet->FieldByName("STOPPED")->AsInteger==1 || lstChgto>=NewChargTo)continue;
  ms=NewChargTo-lstChgto;
  ms=(ms/30.0+0.5);
}
Grid1DSet->EnableControls();
}
在TDateTime lstChgto;这一行下断点,执行到这里的时候,LOCAL窗口中显示i的值是0,ms的值是1.然后末尾那行ms=(ms/30.0+0.5)这行执行完后,ms的值没有变? C++ 变量 日期计算
[解决办法]
你用对话框看看ms的旨在修改之前到底是什么:ShowMessage(ms);

写在ms=NewChargTo-lstChgto;的上面,看第一次的对话框
[解决办法]
另外,如果你是在一个有些规模的系统中调试你的代码,这些莫名其妙的问题,有可能表示该系统存在AV错误(野指针或越界或栈错误)。此时,将代码从系统中剥离,如果单独的测试没问题,挂入系统调试有问题,该可能性还是比较大的。

我也曾为此痛苦过,后来终于找到了越界的代码,修正后,调试器也正常了(所以我也不知道是以前的调试器差些,还是因为去掉越界BUG后,现在的XE4才好用些)。当越界时,结果不可预测,所谓的不可预测就是可能发生任何事情,有经验的黑客则利用这些问题制造机会做自己想做的事情。

热点排行