一、数组越界
为了保证C/C++的运行效率,所以它们都不对数组越界进行检查。
#include<stdio.h> int main() { int a[4] = {1,2,3,4}; for(int i = -2; i <= 8; ++i) printf("a[%d] = %d\n",i, a[i]); } 运行结果: a[-2] = 0 a[-1] = -1 a[0] = 1 a[1] = 2 a[2] = 3 a[3] = 4 a[4] = 1674503728 a[5] = 32766 a[6] = 0 a[7] = 0 a[8] = 4198816数组访问越界,则有可能会访问到随机数据
如果越界访问的内存没有使用权限的话,那么程序就会崩溃;如果有使用权限的话,就有可能访问到随机数据。
二、数组溢出
当赋予数组的元素个数超过数组本身长度的话,就会溢出,会报错。
一般数组溢出会出现超出数组长度的部分没有被存入数组,但如果是以字符串形式输出字符数组的话,则由于不知道超越数组长度的后面部分会是什么,会出现什么字符,都无法识别,因此会出现乱码的情况。不过现在溢出基本上编辑器都会报错,就像下面那个一样,还没输出所谓的乱码,就已经报错了,所以这个知道一下就行。
C语言字符串结尾会有'\0',所以这个字符数组最多只能放n-1个字符,要留1个位置给'\0'。故这个字符数组放4个字符会报错。
标签:int,C语言,越界,报错,数组,溢出 From: https://www.cnblogs.com/algorithm-code/p/16735567.html