目錄
零基礎 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 語言 數組內存溢出
本文由博客 - 猿說編程 猿說編程 發布!