谨防数组越界!

今天第一次对数组越界问题有了深切的感受,数组越界如果在Release版本中运行也不会报错,如果是Debug版本的话,若直接通过常量数值引用数组下标会被检测到数组越界,若通过变量引用数组下标也是不会被检测到的!!!

测试下面的代码,

 1 #include <stdio.h>
 2 
 3 int main(void)
 4 {
 5     int arr[1][1] = {20}, brr[1] = {1}, y = 5;
 6     
 7     //printf("%d\n", arr[5][0] == 0);//Debug版本下,直接用常量引用数组下标会被VS2010检测到数组越界
 8     printf("%d\n", arr[y][0] = 10); //Debug版本下不报错,如果通过变量引用数组下标,越界根本就不会被检测到!!!
 9     //printf("%d\n", brr[5] = 0);  //Debug版本下,直接用常量引用数组下标会被VS2010检测到数组越界
10     printf("%d\n", brr[y]);      //Debug版本下不报错,如果通过变量引用数组下标,越界根本就不会被检测到!!!
11 
12     return 0;
13 }

在Release版本下面运行,那四个printf里面数组虽然越界,但是VS2010直接放行

因为这时候VS2010根本不会对越界问题进行检测!

在Debug版本下运行:

Debug版本的检测效果也是很小的,用变量方式引用数组下标直接放行:

看来应该始终在脑海中注意这个问题,否则当数组越界时,看着程序的莫名其妙的输出只能犯晕了!

posted @ 2014-09-11 21:44  xxNote  阅读(364)  评论(0编辑  收藏  举报