1. 数组越界不报错
以下运行结果
int main2() {
int i;
int a[5] = {0};
for (i = 0; i <= 30; i++) {
a[i] = 0;
printf("a[%d]:%d\n",i, a[i]);
}
return 0;
}
这段代码结果就是:无限循环输出。
原因:
数组越界不报错 只会警告:C6201:索引"30"超出了“O"至"4"的有效范围(对于可能在堆栈中分配的缓冲区"a")。
越界访问会访问了修改了i值 a内存空间 从0x00CFF7E0到 0x00CFF7F2 20个字节 5个Int长度 i为0x00CFF7FC即位置 越界访问会访问到i值,同时a[i] = 0;会把i置空为0,导致i=0;所以会一直循环。