忙了大半天,終於找到一個 AV BUG,安心過51了。

勉励前行 2009-04-30 06:54:59
...
size_t size = Leaves? Leaves->size() : 0 + Exceptions? Exceptions->size(): 0 ;
std::vector<TCheckTime> CTS(size);
...

分配的數組內存不足,造成下標越界,致使內存錯亂。 源於一個問號表達式。
加上括號,就正確了:
size_t size = (Leaves? Leaves->size() : 0) + (Exceptions? Exceptions->size(): 0 ) ;

終於可以安心過51了。祝 51 快樂


...全文
183 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
CeleryZeng 2009-05-05
  • 打赏
  • 举报
回复
jie
Behard 2009-05-04
  • 打赏
  • 举报
回复
有这种事情,不过我一般都是使用 if 的,很少使用 ? 的
qwd100815 2009-05-04
  • 打赏
  • 举报
回复
up
geochway 2009-05-04
  • 打赏
  • 举报
回复
JF.
纯冰糖 2009-05-04
  • 打赏
  • 举报
回复
节日快乐,接分
laowang2 2009-05-04
  • 打赏
  • 举报
回复
jf
痞子酷 2009-05-04
  • 打赏
  • 举报
回复
接分快乐!
datacodebugs 2009-05-04
  • 打赏
  • 举报
回复
五一已经结束,开始工作了
morris88 2009-05-03
  • 打赏
  • 举报
回复
呵呵,手误。接分...
ydlchina 2009-05-03
  • 打赏
  • 举报
回复
过完五一了
fairchild811 2009-05-02
  • 打赏
  • 举报
回复
节日快乐,接分
wg961423 2009-05-02
  • 打赏
  • 举报
回复
五一节,劳动快乐
海嵌 2009-05-01
  • 打赏
  • 举报
回复
过五一!
勉励前行 2009-05-01
  • 打赏
  • 举报
回复
原代码分行写成:
size_t size = Leaves? Leaves->size() : 0 +
Exceptions? Exceptions->size(): 0;
粗看,没有什么问题,要不是逐步隔离调试的结果表明可能该函数有问题,也就被它混过去了。

说一下问题的现象及解决过程,这是一个考勤程序的计算过程,当时的现象是程序计算完成后有时不能正常退出,必须使用“任务管理器”结束程序。开始出现不频繁,而当有多个人在某一天同时出现请假及指定考勤异常时,该现象开始稳定重现。
解决过程:
1、初步检查代码,整个计算过程约1W行代码,涉及20多个类,于是放弃逐个检查代码的做法。
2、单步调试,找出问题的重现点。因为是析构时出错,重点检查各个类的析构过程,因为是vector析构时出错,模板代码令人不知所措,这步花了不少时间。
3、测试表明 AV 故障能稳定地重现,检查出错时所在的vector , 结果其相关代码没有错误。
4、初步确认为 存在越界代码或野指针,这情况通过单步调试是找不到出错代码的。
5、因为故障可以稳定地重现,野指针情况一般为故障不稳定,故先考虑越界的情况,结果证实这步是正确的。
6、在出现问题的vector附近加入多余的内存,测试,故障依然。 表明问题代码不在该处。一时陷入困境。

7、采用注释逐步隔离代码的方法,确认问题代码段。幸好考勤计算过程模块化较好,逐步隔离后,很快就找到相关函数。
8、最后确认:只要运行某代码段,析构时就会出现AV错误。这样就找到了问题函数。
9、检查的结果是:错误代码发生在问题函数调用的另一个子函数中,问题代码就是
size_t size = Leaves? Leaves->size() : 0 +
Exceptions? Exceptions->size(): 0;
是一个函数中的局部变量数组分配内存不足,越界而造成的。证实:数组越界造成的后果不可预测。

野指针的常见解决方法是:
1、打开编译警告,重新编译,看是否有警告:使用未初始化的变量
2、检查类的构造函数,是否未初始化变量
3、依靠代码书写码规范,检查所有使用指针强制转换的地方。
4、检查是否有使用已delete的内存。//这步比较麻烦,需要熟悉代码。
ccrun.com 2009-05-01
  • 打赏
  • 举报
回复
很好,我还在寻找BUG中。
我来看看CB 2009-05-01
  • 打赏
  • 举报
回复
五一节,劳动快乐
loveDelphi2010 2009-05-01
  • 打赏
  • 举报
回复
jf
xjq2003 2009-05-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 haiqian119 的回复:]
过五一!
[/Quote]
51快乐
周药师 2009-05-01
  • 打赏
  • 举报
回复
接分...
小笨象 2009-05-01
  • 打赏
  • 举报
回复
我也在找BUG中。。累。
加载更多回复(4)

552

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 茶馆
社区管理员
  • 茶馆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧