首页 > 代码库 > 谨防数组越界!

谨防数组越界!

今天第一次对数组越界问题有了深切的感受,数组越界如果在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版本的检测效果也是很小的,用变量方式引用数组下标直接放行:

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

谨防数组越界!