防止数据类型变量产生回绕与溢出

产生以上大部分问题的原因主要是:
1.不同数据类型的算术操作,产生了回绕与溢出。
2.不同数据类型的逻辑运算操作,产生了回绕与溢出。
3.存储的数据大小超过了数据类型的最大值或最小值,产生了溢出和回绕。

一、显示地指出某个变量是signed char类型还是unsigned char来执行算数运算

由于不同编译器对char类型的变量定义不同,有可能是signed char,也有可能是unsigned char,所以,只有我们显示地指定数据类型,才能得到唯一的结果。

二、使用size_t类型表示一个对象所占用空间的整数值单位(内存大小)

size_t的引入增强了程序在不同平台上的可移植性,可以作为大小、索引、循环计数和长度的整数值。但是,在进行循环索引的时候,要注意size_t的大小

int i;
size_t n;
for(i=0;i<n;i++)
{//循环体
}

在上述代码中,定义了一个整形变量i,一个size_t变量n,一般size_t变量的数据范围会比int类型大(>INT_MAX),那么i在循环时,有可能会超出INT_MAX,而产生回绕。这里就出现了一个BUG。避免这种BUG的方法就是统一 i 和 n 的数据类型大小,即 i 的范围要大于 n的范围。

三、禁止把size_t类型和它所代表的真实类型混用

因为不同的平台对size_t的定义不同,若与其所代表的真实类型混用可能会在其它的平台报错。但size_t在每个平台都作为大小、索引、循环计数和长度的整数值,都是一个范围很大的数。

四、小心使用无符号类型带来的陷阱
当有符号整型和无符号整型进行算术运算时,有符号整型会自动转化为无符号整型,若此时有符号整型数值超过无符号整型的最大值或小于无符号整型的最小值时,转换就会出现问题,这里就会产生BUG。

五、防止无符号整数回绕
涉及无符号操作数的计算永远不会产生溢出
如果数值超过无符号整型的限定长度时就会发生回绕,即如果无符号整型变量的值超过了无符号整型的上限,就会返回0,然后又从0开始增大。

六、防止有符号整数溢出
当两个数都是有符号整数时,就有可能产生整数溢出,它将会导致“不能确定的行为”。也就是说整数溢出是一种未定义的行为,会随机出现各种各样的错误,出现的错误主要由编译器决定。

C语言--数据溢出导致的缓冲区(堆栈)损坏相关推荐

  1. 平方之后居然出现负数。数据溢出导致各种离奇运算结果

    实数的平方不可能为负值,只有复数的平方才可能出现负数( i 2 = − 1 i^2 = -1 i2=−1). 但是,在程序世界,数据溢出会导致实数的平方出现复制.数据溢出会导致各种离奇的计算结果. C ...

  2. c语言 数据溢出时会输出什么

    目录 文章目录 前言 一.整型数据常见的存储空间和值的范围 二.数据转换规则 原理 三.数据类型的应用 1.char -128~127 2.int类型(以4字节为例) 3.unsigned int(4 ...

  3. python读取文件数据堆栈溢出的原因_堆栈溢出一般是什么原因?

    堆栈是一个在计算机科学中经常使用的抽象数据类型.堆栈中的物体具有一个特性: 最后一个放入堆栈中的物体总是被最先拿出来, 这个特性通常称为后进先出(LIFO)队列. 堆栈中定义了一些操作. 两个最重要的 ...

  4. c语言变量名必须用小写 常量用大写,day02 -C语言 常量 变量 数据类型 进制转换 数据溢出...

    常量 - 不会变化的数据 "hello" 'A' 10 3.14 #define PI 3.14 //采用宏定义的方法 定义一个常量 const int a = 10; 求圆的面积 ...

  5. C语言之字符串探究(六):sprintf——把格式化的数据写入某个字符缓冲区

    相关博文:C++之char和string字符串类探究 相关博文:C语言之数组探究(一):定义.大小.初始化.访问和三要素 相关博文:C语言之字符串探究(一):字符串与字符数组 相关博文:C语言之字符串 ...

  6. c语言字节溢出,C语言变量定义与数据溢出(初学者)

    1.变量定义的一般形式为:类型说明符.变量名标识符等:例:int a,b,c;(abc为整型变量) 在书写变量定义时应注意以下几点: (1)允许在一个类型说明符后,定义多个相同类型的变量.各变量之间用 ...

  7. 【C语言】Pillow(数据溢出问题)

    nxx床上有n个抱枕,而他的床长为x, 宽为y, 假设这n个抱枕均为长方体,给出每个抱枕的长宽高,抱枕可以以任意一个面为底摆放.摆放完所有抱枕后,问nxx床上最多还剩多少面积的地方能让他睡觉 .数据保 ...

  8. python堆栈溢出的原因_堆栈溢出一般是什么原因

    堆栈是一个在计算机科学中经常使用的抽象数据类型.堆栈中的物体具有一个特性: 最后一个放入堆栈中的物体总是被最先拿出来, 这个特性通常称为后进先出(LIFO)队列. 堆栈中定义了一些操作. 两个最重要的 ...

  9. java编程数据溢出问题_Java数据溢出代码详解

    Java数据溢出代码详解 发布时间:2020-10-05 15:08:31 来源:脚本之家 阅读:103 作者:Pony小马 java是一门相对安全的语言,那么数据溢出时它是如何处理的呢? 看一段代码 ...

最新文章

  1. 【linux】——linux下的软件安装
  2. Javascript笔记:(实践篇)从jQuery插件技术说起(上篇)
  3. Scrapy实例1-爬取天气预报存储到Json
  4. 深入探讨JavaScript函数
  5. oracle更新视图。
  6. android 入门 (分析: 非匿名内部类 监听功能的实现)
  7. mysql innodb数据库引擎_mysql的innodb数据库引擎详解
  8. 从入门到进阶,JAVA书籍的最佳阅读顺序!
  9. java学习手册下载_java学习手册
  10. 中级通信工程师考试之六移动通信
  11. 用overleaf 写 计算机学报 格式的论文
  12. 【中级—,android开发入门pdf
  13. 【游戏开发实战 |开源—— 2D项目1 - Ruby‘s Adventure】控制游戏角色移动(1-1)
  14. 使用Office2013打开文档时,弹出“正在与服务器联系以获取信息”对话框问题
  15. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fa
  16. 恶意访问、黑产猖獗,如何做好业务安全“守门人”?丨创新场景50
  17. 过滤器实现用户访问记录日志记录
  18. 人力资源数据分析师前景_数据分析师的前途在哪?
  19. Excel根据不同取值设置单元格颜色
  20. BFC是什么?有什么用?

热门文章

  1. R 编程中的 LOOCV(留一法交叉验证)
  2. 用HTML和css写的界面适应手机界面小结
  3. Android 高级面试题及答案
  4. LTE----013 UE开机后的第一件事: PLMN选择
  5. 浅析编程及类的本质、类的抽象
  6. “收藏本站”,“设为首页”的脚本
  7. 【20210906】让实验室服务器运行本地python代码
  8. android singleTask
  9. 大数据实训室课程体系设计案例分享
  10. 2019-详细Android Studio开发百度地图(4)—百度地图_路线规划的实现