c++循环变量溢出造成死循环
来源:互联网 发布:手机遗像制作软件 编辑:程序博客网 时间:2024/05/17 06:17
今天写程序犯了个错,记录一下。
大致代码如下
/*省略细节*/typedef unsinged short int uint16_t;std::vector<std::string> something;/*一些对something数组的操作*/for(uint16_t i = 0 ;i<something.size();i++){ std::cout<<something<<std::endl;}
该段程序乍看没有问题,但是有一个很大的隐患:
当something数组大小超过unsigned short int大小的时候,程序会死循环,解释如下:
假设我们在对something的操作中将something的大小增加为了1000000个。接下来进入到了循环体。
i循环变量从0开始增加,一直到2的16次方减一,也就是65534之前都很正常(具体大小和编译环境有关,但肯定有个上限),但是在第65535次循环的时候情况发生了变化:此时i的值为65534,我们知道这是无符号短整形的上限。打印完something改位的内容后,循环结束,执行结束动作i++。由于i越界,所以i++的值回到0 。可见,循环继续从0开始。也就是说,该程序会不断循环打印something下标为0到65534的元素,根本停不下来!!!
所以,同学们注意循环变量上界一定要足够大。
0 0
- c++循环变量溢出造成死循环
- eof造成死循环
- hashmap造成死循环
- 死循环-内存溢出
- C语言中数组越界访问造成死循环现象
- 091116(星期一)循环变量被溢出导致死循环的问题
- C#漂浮死循环
- 使用属性时造成的死循环
- 调用自身function造成的死循环
- 数组越界会造成死循环
- HashMap多线程造成了CPU100%,死循环
- hashmap碰撞 造成的死循环
- hashMap线程不安全,造成死循环
- 关于内存溢出产生的死循环
- 死循环
- 死循环
- 死循环
- 死循环
- ARM Jazelle技术简介
- Maven学习(二)- 安装m2eclipse插件
- HashMap解决hash冲突的方法
- QProcess使用思考
- Android 读取资源文件
- c++循环变量溢出造成死循环
- jquery 原理分析
- 窗体管理类 ChildWinManagement
- 事务详解
- Varnish cache for Magento
- WebBrowser一点心得,如果在Javascript和Winform代码之间实现双向通信
- Nginx 502 Bad Gateway错误的原因分析与解决方法
- 运行内存扩展器(RAM)扩大,最高达2.5g
- ARM VFP技术简介