以下是我在C
中的代码main(){
int a[1];
a[0]=10;
a[1]=12;
printf("%d\n",a[1]);
copy_arr(a);
printf("%d",a[1]);
}
以下是输出
12
12
它不应该让数组超出范围或类似的东西吗?
或者上面的代码是否依赖于编译器?
我在gcc编译器中运行上面的内容。
答案 0 :(得分:4)
在C中没有自动数组边界检查。您的代码具有未定义的行为(UB)。这意味着它有时似乎可以工作"。但是你不能依赖任何特定的结果。 UB程序是一个破碎的程序。
答案 1 :(得分:3)
访问超出范围的内存为undefined behaviour。无论是静态分配还是动态分配。
注意:C
没有任何内置功能来检查越界数组访问。因此,默认情况下,您不会警告 [因为可能预期]。
答案 2 :(得分:2)
int a[1];
这个数组只能包含一个整数,有效访问权限为a[0]
,a[1]
将是数组超出绑定的访问权限,这是未定义的behvaior。