目录

零基础 C/C++ 学习路线推荐 : ​​C/C++ 学习目录​​ >> ​​C 语言基础入门​

一.数组内存溢出简介

溢出:想象一个桶,桶的容积是有限的,你装满了水以后,如何还要往里面装,那么水就溢出到地面了。

​C 语言​​中的溢出和这个原理一样,桶的容积就表示你定义的某一数据的内存大小,往里面写入数据就表示在装水。

案例一:一个计时器,最大计 ​​100s​​ 的时,你让他跑了 ​​120​​ 秒,它就溢出了;

案例二:两个 unsignedchar,一个​200​,一个也是​200​,相加,结果也就溢出,因为 ​unsignedchar​ 最大就 ​255​ ;

二.数组内存溢出实例

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言教程 - C语言 数组内存溢出
//@Time:2021/06/10 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/


#include<stdlib.h>
#include<stdio.h>
void main()
{
unsigned char a[3] = {0};
a[0] = 200;
a[1] = 200;
a[2] = a[0] + a[1]; //unsigned char 取值范围:0~255 ,超出取值范围
printf("a:%d b:%d c:%d\n", a[0], a[1], a[2]);
system("pause");
}
/*
输出:
a:200 b:200 c:144
请按任意键继续. . .
*/


在​​C​​语言中​​unsignedchar无符号字符类型​​取值范围是​​0~255​​,很明显​​a[2]=400​​,超出取值范围,​​内存溢出​​!为什么​​a[2]=144​​?

当如果 unsignedchar 变量超过 ​255​之 后,默认又继续重 ​0​ 开始计算,例如:​[int](https://www.codersrc.com/archives/7409.html)​ 类型 和 ​​unsignedchar​​类型转换:

int类型 和 unsigned char类型转换
int unsigned char
254 254
255 255
256 0
257 1
258 2
... ...
399 143
400 144
// 400 - 255 = 144


在取值 0~255 的时候,​int​ 和当如果 ​unsignedchar​ 一样,当超出 ​255​ 之后,当如果 ​unsignedchar​ 继续重 ​0​ 开始;

三.猜你喜欢

  1. ​安装 Visual Studio​
  2. ​安装 Visual Studio 插件 Visual Assist​
  3. ​Visual Studio 2008 卸载​
  4. ​Visual Studio 2003/2015 卸载​
  5. ​C 语言格式控制符/占位符​
  6. ​C 语言逻辑运算符​
  7. ​C 语言三目运算符​
  8. ​C 语言逗号表达式​
  9. ​C 语言 sizeof 和 strlen 函数区别​
  10. ​C 语言 strcpy 和 strcpy_s 函数区别​
  11. ​C 语言 memcpy 和 memcpy_s 区别​
  12. ​C 语言 数组定义和使用​
  13. ​C 语言 数组遍历​
  14. ​C 语言 数组排序 – 冒泡法排序​
  15. ​C 语言 数组排序 – 选择法排序​
  16. ​C 语言 数组排序 – 插入法排序​
  17. ​C 语言 数组排序 – 快速法排序​
  18. ​C 语言 数组下标越界​
  19. ​C 语言 数组内存溢出​