龙空技术网

嵌入式C语言变量溢出的思考

仰泳的水牛 66

前言:

现在同学们对“c语言内存溢出会怎么样”可能比较注意,同学们都想要了解一些“c语言内存溢出会怎么样”的相关文章。那么小编在网摘上搜集了一些对于“c语言内存溢出会怎么样””的相关资讯,希望朋友们能喜欢,各位老铁们一起来了解一下吧!

C语言有无符号和有符合的类型。一个有符合型的变量,char类型范围在[-128, 127]。假如赋值超出该范围,会出现什么情况?

char类型测试溢出

运行结果

编译测试运行,会发现一直在死循环。

当数据溢出的时候,如果是有符合类型,如insgined char表示范围[0,255],当最大值255递增加1,就会变成0,重新开始。如果是有符合数,当发生溢出时,C语言的语法比较宽泛,不会对数据类型做安全性检测,因此也不会触发异常(当结果不确定时,就取决于不同的编译器、编译环境,结果都有可能不一样)。

溢出测试

运行结果

大部分的编译器,运行结果返回是-128,默认采用与无符号数一样的轮回出来。但有些编译器处理结果运行是0,也是一种正常情况。

数据溢出,在嵌入式编程中,往往比较难发现,尤其是代码工程量大的时候,出现BUG需要花费点时间排查。如何快速解决呢?

参考如下:

如果是两个无符号数相加,相加的和,小于其中任何一个加数,那么肯定是溢出了。

如果是两个有符号数相加,两个整数相加的和小于0,则溢出。如果两个附属相加的和大于0,则也发生了溢出。

通过本文简单介绍,在C编程中,需要留意数据溢出的情况。

标签: #c语言内存溢出会怎么样 #c语言数据溢出解决