
@H_419_8@
说我有@H_419_8@
@H_419_8@
unsigned int16 badFlow=65535 //max unsigned int16 value
其二进制值为1111 1111 1111 1111.@H_419_8@
如果我那么@H_419_8@
@H_419_8@
badFlow++;
位模式变为1 0000 0000 0000 0000
17位.显然badFlow == 0,但是额外的翻转位也是@H_419_8@
>被丢弃
>或驻留在任何字节* flowPtr =& badFlow 2;
点.@H_419_8@
我假设后者,但希望前者.@H_419_8@
我的问题:一位同事用一个柜台写了一些不好的代码,这个柜台已经在所有生产的产品上溢出了大约2年.考虑到我们的客户对这些工具的使用收费,由于潜在的糟糕数据,这是几百万美元的危险.@H_419_8@解决方法 C中的算术使用值而不是内存中的字节进行.你的表达式badFlow等同于badFlow = badFlow 1.右侧被评估为int类型(由于默认促销,假设int大于16位;如果int只有16位,那么它将被评估为unsigned int)得到65536,然后当65536被分配到无符号的16位变量时,它以模数65536减少,结果为0.
@H_419_8@
摆脱这个问题的重要一点是badFlow不是对& badFlow的内存的直接 *** 作(尽管它可能在某些实现中实现).它只是添加和赋值的简写.@H_419_8@ 总结
以上是内存溢出为你收集整理的PIC中的整数溢出 – 流程在哪里?全部内容,希望文章能够帮你解决PIC中的整数溢出 – 流程在哪里?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)