C++代码中边界效应引发的问题

        之前测试同事那边发现这样一个问题:当客户端使用某一帐号进行登录时,一直处于登录中的状态,一直登不进系统;只是使用那个帐号有问题,其他的帐号登录系统好像都没有问题。我们的会议系统中集成了即时通讯的功能,登录时会到服务器端去获取联系人列表,获取联系人标记信息后再到另外一个服务器上去取该联系人的详细信息。获取详细信息时,当联系人比较多时,会分批发送联系人标记信息,一次只发送20个。其实就是这20个引起的问题,刚好当前帐号有20个联系人,由于代码逻辑有问题,没有对20这个边界情况做处理,导致状态切换不成功,从而导致了上述问题的产生。

        另外,在前段时间加代码的过程中遇到了一个由边界数字0引起的死循环的情况。代码中使用了vector列表,在遍历列表的时候使用到了类似下面的代码:

for ( UINT dwIndex = 0; dwIndex <= vtList.Size() - 1; dwIndex++ )
{
   ......
}

        其实死循环的问题并不难排查,其表现为CPU占用率持续高百分比占用,仅借此情况来说明问题。在for循环的条件判断中,tMultiChatMsgList.Size() - 1结果值对应的是一个有符号整型数据,而dwIndex则对应一个无符号整型数据,两者在比较大小时,会做类型转换。在涉及两种数据类型的操作中,它们之间等级较低的类型会被转换成等级较高的类型。按照从高到低的顺序给各种数据类型分等级,依次为:long double, double, float, unsigned long long, long long, unsigned long

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dvlinker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值