C/C++不做数组越界检查

C语言非常重视运行时的效率,所以没有进行数组越界检查,而C++继承了C的效率要求,自然也不做数组越界检查。(检查数据越界,编译器就必须在生成的目标代码中加入额外的代码用于程序运行时检测下标是否越界,这就会导致程序的运行速度下降

例如下面这段代码:

	int a[2];//定义一个长度为2的int型数组a
	a[0] = 1;
	a[1] = 2;
	a[2] = 4;//越界
	for (int i = 0; i < 3; i++)
		printf("%d\t", a[i]);
	
	printf("\n");
	for (int i = 0; i < 3; i++)
		printf("%d\t", &a[i]);

运行的结果如下:

第一行输出结果是a[0]、a[1]、a[2]的值,第二行分别输出它们三个的地址。可以发现他们在内存中是连续的。(int类型大小为4字节)

分析:

        数组越界后,会自动接着前面那块内存往后写,这样带来的将会是一系列安全问题。因为界外的内存不确定是否已经存放了东西,如果不凑巧存放着比较重要的数据,那么数组越界后将会把这块内存上的重要数据替换掉,后果可想而知。

        所以还是需要程序员对自己的代码负责,如果写代码的时候细心点就不会出现这种问题,况且还可以用STL作越界检查。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值