不光数组越界使用,非法访问内存数据(特别是写入数据),都可能使得程序跑飞。
因为 内存中的数据本身是根据程序加载分配给各种变量等使用的,如果通过地址非法访问写入数据(数组越界使用也是这样的一种情况),则就非法改变了某个数据值,有可能这个数据是控制程序流程的,这样程序当然就不能正常按流程走,就跑飞啦。
比如 整数数组A[20]后面的内存地址分配给 整型变量b,在程序中有
b=99
while(b<100){
...
b++;
A[20]=50;
}
这样的程序因为b一直会因为A越界访问改写为50,所以就死循环啦。
这种非法访问,数组使用越界问题是最容易出现的,因为数组越界使用除非程序员自行判断处理,编译器等一般是检测不了这样的问题的。