今天第一次对数组越界问题有了深切的感受,数组越界如果在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版本的检测效果也是很小的,用变量方式引用数组下标直接放行:
看来应该始终在脑海中注意这个问题,否则当数组越界时,看着程序的莫名其妙的输出只能犯晕了!
时间: 2024-10-27 09:29:11