码迷,mamicode.com
首页 > 其他好文 > 详细

一个短路求值引起的一个小bug

时间:2014-07-09 19:00:02      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:blog   问题   代码   时间   div   amp   

今天在写一个判断字符串是否回文时因为短路求值问题导致了一个bug,记录如下:

 

代码如下

bool isPal(char str[],int len)
{
    int begin=0;
    int end=len-1;
    bool result=true;
    cout<<str<<endl;
    while(begin<end)
    {
        result=result&&(str[begin++]==str[end--]);
    }
    cout<<"after "<<str<<endl;
    return result;
}

运行时发现,在str[]的长度为4时,程序长时间运行而无结果,最后定位到是该函数引起。

str[]="1000"时,begin=0,end=3

result=result&&(str[begin++]==str[end--]);该句执行完毕后,begin=1;end=2;result=false

再次循环时,短路求值,使得begin++与end--不会再被执行,因而无法退出循环。

改为result=(str[begin++]==str[end--])&&result;

或while(begin<end && result)//这种更好,避免了后续的无谓的比较

 

-------------

写代码这么多年了,竟然还是会犯这种错误。。。 

 

一个短路求值引起的一个小bug,布布扣,bubuko.com

一个短路求值引起的一个小bug

标签:blog   问题   代码   时间   div   amp   

原文地址:http://www.cnblogs.com/zhenglichina/p/3831841.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!