C语言 数组内存溢出

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

一.数组内存溢出简介


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

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

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

       案例二:两个 unsigned char,一个200,一个也是200,相加,结果也就溢出,因为 unsigned char 最大就 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语言中unsigned char无符号字符类型取值范围是0~255,很明显a[2] = 400,超出取值范围,内存溢出!为什么a[2] = 144

       当如果 unsigned char 变量超过 255之 后,默认又继续重 0 开始计算,例如:int 类型 和 unsigned char类型转换:

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 和当如果 unsigned char 一样,当超出 255 之后,当如果 unsigned char 继续重 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语言 数组内存溢出

未经允许不得转载:猿说编程 » C语言 数组内存溢出
喜欢(2) 打赏

评论抢沙发

评论前必须登录!

不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!!

开始学习

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏