为什么编译或运行时不会抛出错误

use*_*178 1 c arrays

int main()
{
    int a[2] = {1,2};
    a[2] = 3;
    printf("\n\n%d  %d  %d\n\n",a[0],a[1],a[2]);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我输出为 1 2 3

为什么在运行时或编译时没有抛出错误?

Bar*_*mar 13

您是否听说过缓冲区溢出导致的所有安全问题?它们存在是因为C没有任何自动数组边界检查.程序员有责任确保它们不在数组限制之外进行寻址,编译器不会检查它.