43.C语言 数组下标越界和内存溢出区别

最后更新于:2020-08-23 20:41:24

一.数组下标越界和内存溢出简介

溢出本义是算术溢出(arithmetic overflow),指算术计算结果无法在一定范围内表示,细分上溢(overflow)和下溢(underflow)。

越界即访问越界(access out of range),指对存储的访问不在预先指定的界限内。逻辑上来说可能造成访问越界的计算结果也可以看成一种溢出,这是引申义。只不过两种情况经常一起出现,所以混用了。

二.数组下标越界和内存溢出区别

1、溢出是把大的东西往小的东西里装造成的,会造成程序逻辑异常,但一般不会abort。

比如一个计时器,最大计100s的时,你让他跑了120秒,它就溢出了。

比如一个两个char,一个200,一个也是200,相加,结果也就溢出,因为char最大就255.

2、越界是访问或者使用到不属于它的地方,会造成abort,甚至死机。

比如C语言数组int a[3],明明只有3个元素,你用a[3],这就越界了;

比如你申请了100字节的内存,但你写的时候写到101字节去了,这也就是越界。


猜你喜欢

1. 三目运算符

2. 逗号表达式

3. NaN(Not a Number)

4. memcpy/strcpy/strcpy_s 区别

5. unicode 和多字节区别

6. 数组定义和使用

7. sizeof和strlen函数区别

8. Debug和_DEBUG区别

9. _WIN32/WIN32/_WIN64/WIN64区别

10. 判断exe可执行程序是32位的还是64位

11. 数组下标越界

12. 数组内存溢出


转载请注明: 猿说编程 » C/C++教程 » 数组下标越界和内存溢出区别

赞赏

微信赞赏支付宝赞赏