普通数组也是动态的吗?

时间:2015-01-17 08:42:44

标签: c arrays

以下是我在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编译器中运行上面的内容。

3 个答案:

答案 0 :(得分:4)

在C中没有自动数组边界检查。您的代码具有未定义的行为(UB)。这意味着它有时似乎可以工作"。但是你不能依赖任何特定的结果。 UB程序是一个破碎的程序。

答案 1 :(得分:3)

访问超出范围的内存为undefined behaviour。无论是静态分配还是动态分配。

注意:C没有任何内置功能来检查越界数组访问。因此,默认情况下,您不会警告 [因为可能预期]。

答案 2 :(得分:2)

int a[1];

这个数组只能包含一个整数,有效访问权限为a[0]a[1]将是数组超出绑定的访问权限,这是未定义的behvaior。