目录
零基础 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
开始;
三.猜你喜欢
- 安装 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 语言 数组内存溢出
未经允许不得转载:猿说编程 ? C 语言 数组内存溢出
本文由博客 - 猿说编程 猿说编程 发布!