零基础 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
开始;
三.猜你喜欢
- 安装 Visual Studio
- 安装 Visual Studio 插件 Visual Assist
- Visual Studio 2008 卸载
- Visual Studio 2003/2015 卸载
- C语言格式控制符/占位符
- C语言逻辑运算符
- C语言三目运算符
- C语言逗号表达式
- C语言 sizeof 和 strlen 函数区别
- C语言 strcpy 和 strcpy_s 函数区别
- C语言 memcpy 和 memcpy_s 区别
- C语言 数组定义和使用
- C语言 数组遍历
- C语言 数组排序 – 冒泡法排序
- C语言 数组排序 – 选择法排序
- C语言 数组排序 – 插入法排序
- C语言 数组排序 – 快速法排序
- C语言 数组下标越界
- C语言 数组内存溢出
ChatGPT 3.5 国内中文镜像站免费使用啦
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容