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;所以会一直循环。

Copyright © ershouche-FE 2019 all right reserved,powered by Gitbook文件修订时间: 2022-02-28 11:09:16

results matching ""

    No results matching ""