读书人

关于数组越界有关问题

发布时间: 2013-07-01 12:33:04 作者: rapoo

关于数组越界问题
关于数组越界有关问题

#include <stdio.h>
int main(void)
{
int arr[3];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
arr[3] = 4;
arr[4] = 5;
printf("%d", arr[5]);
return 0;
}

这段代码不是数组越界了吗?为什么我编译还能通过,运行后输出0;

关于数组越界有关问题

谁能解释一下
[解决办法]
因为越界的后果未知的
[解决办法]
做梦呢, 还想编译器都能帮你检查出错误啊... 只能靠你自己去检查.
大范围的越界造成内存访问异常, 通常就是提示段错误.
小范围的越界可能造成程序逻辑错误或各种灵异现象.

[解决办法]
vs2010对以下行:
arr[4] = 5;
提出警告:
warning C4789: 内存复制的目标太小
即警告越界了。

运行时提示出错:
Run-Time Check Failure #2 - Stack around the variable 'arr' was corrupted.

[解决办法]
编译器一般不对这个做检查(新版本也许会做检查),运行结果出不出错就看你的运气了。当然最重要的是你知道这种做法是错误的就可以了

读书人网 >C++

热点推荐